This function finds the middle value of an array. But the conditional statement makes no sense to me, since `arr.length === 0`

is never true but the function still works for both even and odd numbers. I think the condition should be `arr.length % 2 !== 0`

and it works too, but even then I don’t see how the correct value is returned, since for an array of 1-13, the function would return the Math.floor of 13/2 = 6.5 which is 6, but it returns 7. And for an array 1-12 it would return the Math.ceil of (12-1)/2 = 5.5 which is also 6, but again it returns 7, which is what it’s supposed to do but I don’t see how the conditional statements produce this result.

let x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; // if even, the number closer to end is returned function findMiddle(arr) { return arr.length === 0 ? arr[Math.floor(arr.length / 2)] : arr[Math.ceil((arr.length - 1) / 2)]; } console.log(findMiddle(x))

## Advertisement

## Answer

Since the condition is always false, this function will always return the first value which is `arr[Math.ceil((arr.length - 1) / 2)]`

which is always correct I assume.

- For the first example (an array from 1 – 13):
`arr.length`

is`13`

, arr.length / 2 will be`6.5`

, then`Math.ceil(arr.length / 2)`

will be`7`

and finally`arr[Math.ceil(arr.length / 2)]`

will result in`arr[7]`

which is`8`

- For the second example (an array from 1 – 12):
`arr.length`

is`12`

, arr.length / 2 will be`6`

, then`Math.ceil(arr.length / 2)`

will be`6`

and finally`arr[Math.ceil(arr.length / 2)]`

will result in`arr[6]`

which is`7`

.

**Conclusion:** The condition is not doing anything there. It’s completely useless if you always provide it with non-empty arrays. Your function, in that case, will be simply:

function findMiddle(arr) { return arr[Math.ceil(arr.length / 2)] }

And it will give the same results.