Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.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
Javascript 使用js获取元素的总和_Javascript_Arrays_Sum_Reduce - Fatal编程技术网

Javascript 使用js获取元素的总和

Javascript 使用js获取元素的总和,javascript,arrays,sum,reduce,Javascript,Arrays,Sum,Reduce,我有一个数组。此数组中的每个元素都是对象,也包含数组。 所以我需要得到数组中存在的每个项的总和 我尝试了下一步: function getSum(total, item) { return total + item; } var sum = array.reduce((total, item) => total + item.data.reduce(getSum)); 但它返回的不是sum,而是字符串,它以对象开始。您需要为总计设置: var sum = array.reduc

我有一个数组。此数组中的每个元素都是对象,也包含数组。 所以我需要得到数组中存在的每个项的总和

我尝试了下一步:

function getSum(total, item) {
    return total + item;
}

var sum = array.reduce((total, item) => total + item.data.reduce(getSum));
但它返回的不是sum,而是字符串,它以
对象开始。

您需要为
总计设置:

var sum = array.reduce((total, item) => total + item.data.reduce(getSum, 0), 0);
如果没有,它将用数组的第一项初始化,在您的情况下,它是一个对象。这就是为什么你会得到意想不到的字符串

您甚至可以使用
total
作为第二次缩减的初始值来缩短代码:

var sum = array.reduce((total, item) => item.data.reduce(getSum, total), 0);
您需要设置
总计

var sum = array.reduce((total, item) => total + item.data.reduce(getSum, 0), 0);
如果没有,它将用数组的第一项初始化,在您的情况下,它是一个对象。这就是为什么你会得到意想不到的字符串

您甚至可以使用
total
作为第二次缩减的初始值来缩短代码:

var sum = array.reduce((total, item) => item.data.reduce(getSum, total), 0);
这很简单

var array = [
    {data: [1,2,3]},
    {data: [4,5,6]}
];
array.reduce((total, item) => total + item.data.reduce((a, b) => a + b), 0);
// result = 21
第二个(内部)reduce没有初始值,因此

  • 第一次调用:a=数据[0],b=数据[1]
  • 第二次调用:a=运行总数,b=数据[2]
请参阅reduce文档

第一个(外部)reduce确实需要一个初始值,因为它的回调中的项不是数字

var array = [
    {data: [1,2,3]},
    {data: [4,5,6]}
];
array.reduce((total, item) => total + item.data.reduce((a, b) => a + b), 0);
// result = 21
第二个(内部)reduce没有初始值,因此

  • 第一次调用:a=数据[0],b=数据[1]
  • 第二次调用:a=运行总数,b=数据[2]
请参阅reduce文档


第一个(外部)reduce确实需要一个初始值,因为它的回调中的项不是数字

显示
数组的值
。显示
数组的值
。抱歉,我在看到您的编辑之前将其作为答案发布:p我在看到您的编辑之前将其作为答案发布:p