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 函数返回一个数字,而在第二个代码中,它返回一个数组。当您返回一个数字时,下次调用您的函数时,它采用数字的长度,而不是数组。第二个代码是正确的,因为你每次都取数组的长度。
我正在尝试使用 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 函数返回一个数字,而在第二个代码中,它返回一个数组。当您返回一个数字时,下次调用您的函数时,它采用数字的长度,而不是数组。第二个代码是正确的,因为你每次都取数组的长度。