Reduce 函数如何在 JavaScript 中真正发挥作用?

How Reduce function really work in JavaScript?

我正在尝试使用 reduce 函数在 arrays 中找到最大长度的数组 所以我一开始尝试了这种方法,但没有用

const arrays = [[1],[3,3,4],[3,4],[4,5],[6]]
let maxLength = arrays.reduce( (acc, cur) => {
    return acc.length > cur.length ? acc.length : cur.length
})

console.log(maxLength) // output : 1

所以我尝试以另一种方式获取长度并且成功了

const arrays = [[1],[3,3,4],[3,4],[4,5],[6]]
let maxLength = arrays.reduce( (acc, cur) => {
    return acc.length > cur.length ? acc : cur
}).length

console.log(maxLength) // output : 3

谁能解释一下这两种方法有什么区别?

如果您对最长数组的长度感兴趣,请将长度存储在累加器中(如第一个示例);如果您对长度最长的数组感兴趣,请将该数组存储在累加器中(如第二个示例所示)。你不能做的是混搭。

获取最长数组的长度

在这种情况下,您需要提供一个初始值(例如0)给reduce()

const arrays = [[1],[3,3,4],[3,4],[4,5],[6]];

const max = arrays.reduce((a, {length}) => Math.max(a, length), 0);

console.log(max);

获取长度最长的数组

在这种情况下,您不需要提供初始值,因为它默认为数组的第一个元素。

const arrays = [[1],[3,3,4],[3,4],[4,5],[6]];

const max = arrays.reduce((a, v) => v.length > a.length ? v : a);

console.log(max);

在第一个代码中,reduce 函数返回一个数字,而在第二个代码中,它返回一个数组。当您返回一个数字时,下次调用您的函数时,它采用数字的长度,而不是数组。第二个代码是正确的,因为你每次都取数组的长度。