Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结合数组的长度,为什么返回NaN?JavaScript_Javascript_Arrays - Fatal编程技术网

结合数组的长度,为什么返回NaN?JavaScript

结合数组的长度,为什么返回NaN?JavaScript,javascript,arrays,Javascript,Arrays,信息:您好,您可以看到有4个阵列,然后是一个包含这些阵列的阵列。我正在使用u.reduce来增加数组的长度。当我用数组数组调用函数时,我得到了NaN。我希望得到19分 为什么会这样?谢谢你的帮助 var array1 = [[1],[2],[3],[4],[5]]; var array2 = ["a", "b"]; var array3 = [{name : "John"}, {age : 21}]; var array4 = [1,2,3,4,5,6,7,8,9,0]; var array5

信息:您好,您可以看到有4个阵列,然后是一个包含这些阵列的阵列。我正在使用u.reduce来增加数组的长度。当我用数组数组调用函数时,我得到了NaN。我希望得到19分

为什么会这样?谢谢你的帮助

var array1 = [[1],[2],[3],[4],[5]];
var array2 = ["a", "b"];
var array3 = [{name : "John"}, {age : 21}];
var array4 = [1,2,3,4,5,6,7,8,9,0];

var array5 = [array4, array3, array2, array1];

var arrayComboLength = function(array){
return _.reduce(array, function(a,b){
    return a.length + b.length;
});
}


console.log(arrayComboLength(array5));  --> // NaN

reduce
回调的第一个参数是累加器。您正在访问一个数字的
长度
,这将导致
未定义
。然后将
undefined
添加到剩余数组长度的数字中,这将导致
undefined

var arrayComboLength = function(array) {
  return _.reduce(array, function(a, b) {
    return a + b.length;
  }, 0);
}

这与文档中给出的示例非常接近,
reduce
回调的第一个参数是累加器。您正在访问一个数字的
长度
,这将导致
未定义
。然后将
undefined
添加到剩余数组长度的数字中,这将导致
undefined

var arrayComboLength = function(array) {
  return _.reduce(array, function(a, b) {
    return a + b.length;
  }, 0);
}

这与文档中给出的示例非常接近,计数函数将递归应用于数组的所有元素。例如,它们将递归地应用于array4中的标量值。标量值没有长度

计数函数将递归应用于数组的所有元素。例如,它们将递归地应用于array4中的标量值。标量值没有长度

嗨,非常感谢,这很有效。在你的解决方案中,如果我不包括0,我得到的结果是-->//1,2,3,4,5,6,7,8,90225我不知道为什么会得到它。如果我们忽略起始值(0),我会有这样的印象。更正:如果我们忽略起始值(0),它将从0开始。这不是真的吗?@AugustusBrennan不,如果不另行指定,它将使用第一个数组元素,并开始在第二个元素上运行。嗨,非常感谢,这很有效。在你的解决方案中,如果我不包括0,我得到的结果是-->//1,2,3,4,5,6,7,8,90225我不知道为什么会得到它。如果我们忽略起始值(0),我会有这样的印象。更正:如果我们忽略起始值(0),它将从0开始。这不是真的吗?@AugustusBrennan不,如果不另行指定,它将使用第一个数组元素,并开始在第二个元素上运行。