Javascript 减少空数组的数组数

Javascript 减少空数组的数组数,javascript,ecmascript-6,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)似乎也不起作用 我遗漏了什么吗?您可以为其获取起始值 var getLength=(r,x)=>r+x.length, length0=[]、[]、[]、[]、[]减少(getLength,0), //

我试图在数组上的数组上运行reduce函数。数组中的数组可以为空。因此: []、[]、[]、[]、[]。reduce((x,y)=>x.length+y.length)不起作用

[[2,3],[2,3],[3,5],[5,6]。reduce((x,y)=>x.length+y.length)似乎也不起作用


我遗漏了什么吗?

您可以为其获取起始值

var getLength=(r,x)=>r+x.length,
length0=[]、[]、[]、[]、[]减少(getLength,0),
//                                           ^
length1=[[2,3],[2,3],[3,5],[5,6]。减少(getLength,0);
//                                                           ^
控制台日志(长度0);

控制台日志(长度1)您可以获取的起始值

var getLength=(r,x)=>r+x.length,
length0=[]、[]、[]、[]、[]减少(getLength,0),
//                                           ^
length1=[[2,3],[2,3],[3,5],[5,6]。减少(getLength,0);
//                                                           ^
控制台日志(长度0);

控制台日志(长度1)请小心,因为x.length和y.length最终会变成整数,而整数没有length属性

你可以这样做

(x, y) => x.length || x + y.length || y

因此,如果存在x.length,则会使用它,否则只需使用x的值,因为x.length和y.length最终会变成整数,而整数没有长度属性

你可以这样做

(x, y) => x.length || x + y.length || y

因此,如果存在x.length,则使用它,否则只需使用x的值传递函数的签名作为
的第一个参数。reduce

(accumulator, currentValue, currentIndex, array) => {...}
可以传递给
reduce
的第二个参数是累加器的起始值

在您的情况下,
(x,y)=>x.length+y.length
试图获取名为
x
的累加器的
长度
,该累加器将
未定义
,并将其添加到父数组中第一个数组的
长度

当您尝试将
未定义的
添加到一个数字时,会得到
NaN

我猜您是在计算父数组中所有数组的聚合长度?如果是这样,试试这个

[[],[],[],[]].reduce((acc, array) => acc + array.length, 0)
// returns 0

[[2, 3], [2, 3], [3, 5], [5, 6]].reduce((acc, array) => acc + array.length, 0)
// returns 8

作为
.reduce
的第一个参数传递的函数的签名是

(accumulator, currentValue, currentIndex, array) => {...}
可以传递给
reduce
的第二个参数是累加器的起始值

在您的情况下,
(x,y)=>x.length+y.length
试图获取名为
x
的累加器的
长度
,该累加器将
未定义
,并将其添加到父数组中第一个数组的
长度

当您尝试将
未定义的
添加到一个数字时,会得到
NaN

我猜您是在计算父数组中所有数组的聚合长度?如果是这样,试试这个

[[],[],[],[]].reduce((acc, array) => acc + array.length, 0)
// returns 0

[[2, 3], [2, 3], [3, 5], [5, 6]].reduce((acc, array) => acc + array.length, 0)
// returns 8

[]、[]、[]、[]、[]、[]].reduce((x,y)=>x.length+y.length)
不起作用,因为您返回的是整数值而不是数组。因此,在第二次迭代中,它将失败,因为number没有
。length
请添加该操作的潜在结果。
[[]、[]、[]、[]、[]、[]、[]。reduce((x,y)=>x.length+y.length)
不起作用,因为您返回的是整数值,而不是数组。因此,在第二次迭代中,它将失败,因为number没有
。length
请添加操作的潜在结果。这是正确答案,看起来您错过了reduce的回调结构。作为将来的参考,
.reduce
的MDN页面是ohhhh。那么,在本例中,“array”是当前迭代的元素吗?是的,完全正确
reduce
有点奇怪,因为回调的第一个参数是累加器。这是正确的答案,看起来你错过了reduce的回调结构。作为将来的参考,
.reduce
的MDN页面是ohhhh。那么,在本例中,“array”是当前迭代的元素吗?是的,完全正确
reduce
有点奇怪,因为回调的第一个参数是累加器。