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
is13
, arr.length / 2 will be6.5
, thenMath.ceil(arr.length / 2)
will be7
and finallyarr[Math.ceil(arr.length / 2)]
will result inarr[7]
which is8
- For the second example (an array from 1 – 12):
arr.length
is12
, arr.length / 2 will be6
, thenMath.ceil(arr.length / 2)
will be6
and finallyarr[Math.ceil(arr.length / 2)]
will result inarr[6]
which is7
.
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.