这个条件语句是如何工作的?
How does this conditional statement work?
此函数查找数组的中间值。但是条件语句对我来说毫无意义,因为 arr.length === 0
永远不会为真,但该函数仍然适用于偶数和奇数。我认为条件应该是 arr.length % 2 !== 0
并且它也有效,但即使那样我也看不到正确的值是如何 returned 的,因为对于 1-13 的数组,函数将 return 13/2 = 6.5 的 Math.floor 是 6,但它 return 是 7。对于数组 1-12,它将 return 的 Math.ceil (12-1)/2 = 5.5 也是 6,但它又是 returns 7,这是它应该做的,但我不明白条件语句是如何产生这个结果的。
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))
如果arr没有元素,这个函数returns arr[0]
不存在,所以会报错。 (编辑:这会发生在任何其他语言中,但 javascript 实际上是 javascript returns 未定义)
对于偶数个元素,它 returns 两个 middle-elements 中的第二个 middle-elements。
对于奇数个元素,它returns中间那个。
在您的示例中,它 returns 索引 6 处的元素。该元素的值为 7。
由于条件始终为假,此函数将始终 return 第一个值,即 arr[Math.ceil((arr.length - 1) / 2)]
,我认为这始终是正确的。
- 对于第一个示例(从 1 到 13 的数组):
arr.length
是 13
,arr.length / 2 将是 6.5
,然后 Math.ceil(arr.length / 2)
将是 7
最后 arr[Math.ceil(arr.length / 2)]
将导致 arr[7]
即 8
- 对于第二个示例(1 - 12 的数组):
arr.length
是 12
,arr.length / 2 将是 6
,然后 Math.ceil(arr.length / 2)
将是 6
最后 arr[Math.ceil(arr.length / 2)]
将导致 arr[6]
即 7
.
结论:条件是什么都不做。如果你总是给它提供 non-empty 数组,那是完全没用的。在这种情况下,您的功能将很简单:
function findMiddle(arr) {
return arr[Math.ceil(arr.length / 2)]
}
它会给出相同的结果。
此函数查找数组的中间值。但是条件语句对我来说毫无意义,因为 arr.length === 0
永远不会为真,但该函数仍然适用于偶数和奇数。我认为条件应该是 arr.length % 2 !== 0
并且它也有效,但即使那样我也看不到正确的值是如何 returned 的,因为对于 1-13 的数组,函数将 return 13/2 = 6.5 的 Math.floor 是 6,但它 return 是 7。对于数组 1-12,它将 return 的 Math.ceil (12-1)/2 = 5.5 也是 6,但它又是 returns 7,这是它应该做的,但我不明白条件语句是如何产生这个结果的。
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))
如果arr没有元素,这个函数returns arr[0]
不存在,所以会报错。 (编辑:这会发生在任何其他语言中,但 javascript 实际上是 javascript returns 未定义)
对于偶数个元素,它 returns 两个 middle-elements 中的第二个 middle-elements。
对于奇数个元素,它returns中间那个。
在您的示例中,它 returns 索引 6 处的元素。该元素的值为 7。
由于条件始终为假,此函数将始终 return 第一个值,即 arr[Math.ceil((arr.length - 1) / 2)]
,我认为这始终是正确的。
- 对于第一个示例(从 1 到 13 的数组):
arr.length
是13
,arr.length / 2 将是6.5
,然后Math.ceil(arr.length / 2)
将是7
最后arr[Math.ceil(arr.length / 2)]
将导致arr[7]
即8
- 对于第二个示例(1 - 12 的数组):
arr.length
是12
,arr.length / 2 将是6
,然后Math.ceil(arr.length / 2)
将是6
最后arr[Math.ceil(arr.length / 2)]
将导致arr[6]
即7
.
结论:条件是什么都不做。如果你总是给它提供 non-empty 数组,那是完全没用的。在这种情况下,您的功能将很简单:
function findMiddle(arr) {
return arr[Math.ceil(arr.length / 2)]
}
它会给出相同的结果。