减少空数组的数组

时间:2017-10-31 10:54:53

标签: javascript ecmascript-6

我正在尝试在阵列上的数组上运行reduce函数。数组中的数组可以为空。所以: [[],[],[],[]] .reduce((x,y)=> x.length + y.length)不起作用

[[2,3],[2,3],[3,5],[5,6]] .reduce((x,y)=> x.length + y.length)不似乎也有用吗?

我错过了什么吗?

3 个答案:

答案 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

的值