我正在尝试在阵列上的数组上运行reduce函数。数组中的数组可以为空。所以: [[],[],[],[]] .reduce((x,y)=> x.length + y.length)不起作用
[[2,3],[2,3],[3,5],[5,6]] .reduce((x,y)=> x.length + y.length)不似乎也有用吗?
我错过了什么吗?
答案 0 :(得分:2)
作为.reduce
的第一个参数传递的函数的签名是
(accumulator, currentValue, currentIndex, array) => {...}
您可以传递给reduce
的第二个参数是累加器的起始值。
在您的情况下,(x, y) => x.length + y.length
正在尝试获取名为length
的累加器的x
,其为undefined
,并将其添加到{{1}父数组中的第一个数组。
当您尝试将length
添加到某个号码时,您会获得undefined
。
我的猜测是你在尝试计算父数组中所有数组的总长度?如果是这样,试试这个......
NaN
答案 1 :(得分:1)
您可以为Array#reduce
取一个起始值。
var getLength = (r, x) => r + x.length,
length0 = [[], [], [], []].reduce(getLength, 0),
// ^
length1 = [[2, 3], [2, 3], [3, 5], [5, 6]].reduce(getLength, 0);
// ^
console.log(length0);
console.log(length1);
答案 2 :(得分:1)
注意因为x.length和y.length最终会变成整数而整数没有长度属性。
您可以执行类似
的操作(x, y) => x.length || x + y.length || y
因此,如果x.length存在,则使用它,否则只使用x
的值