Skip to content
Advertisement

How does this conditional statement work?

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.

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement