Array.prototype.reduce() 在一个元素的数组上

Array.prototype.reduce() on arrays of one element

在接下来的reduction + map次操作中,没有。 3让我很困惑。谁能解释一下为什么

// 1
[1,2,3,4,5].filter(x => x==3).reduce((x, y) => y) // -> 3, all good

// 2
[1,2,3,4,5].filter(x => x<=3).reduce((x, y) => 0) // -> 0, still good

// 3
[1,2,3,4,5].filter(x => x==3).reduce((x, y) => 0) // -> 3, hello?

换句话说:为什么一个元素数组的归约会忽略映射到0操作?这最终将用于对象数组,如 .reduce((x,y) => y.attr) 中的 returns y 而不是单个元素数组的 y.attr

过滤后的数组仅包含一个元素,因此 reduce 将 return 该值。

阅读文档:

If the array has only one element (regardless of position) and no initialValue was provided, or if initialValue is provided but the array is empty, the solo value would be returned without calling callback.

更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce