我有阵列。此数组中的每个元素都是object,它也包含数组。 所以我需要得到数组中存在的每个项目的总和。
我接下来试过了:
function getSum(total, item) {
return total + item;
}
var sum = array.reduce((total, item) => total + item.data.reduce(getSum));
但它返回的不是sum,而是字符串,以Object
...
答案 0 :(得分:5)
您需要为total
设置an initial value:
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);
答案 1 :(得分: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没有初始值,所以
请参阅减少文档
第一个(外部)减少DOES需要一个初始值,因为它的回调中的项目不是数字