使用js获取元素的总和
Get Sum of elements using js
我有数组。这个数组中的每个元素都是对象,也包含数组。
所以我需要获取数组中存在于数组中的每个项目的总和。
接下来我试过了:
function getSum(total, item) {
return total + item;
}
var sum = array.reduce((total, item) => total + item.data.reduce(getSum));
但它returns不是总和,而是以Object
...
开头的字符串
您需要为 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);
简直了
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 = data[0], b = data[1]
- 第二次调用:a = 运行 总数,b = 数据[2]
查看减少文档
第一个(外部)reduce 确实需要一个初始值,因为它的回调中的项目不是数字
我有数组。这个数组中的每个元素都是对象,也包含数组。 所以我需要获取数组中存在于数组中的每个项目的总和。
接下来我试过了:
function getSum(total, item) {
return total + item;
}
var sum = array.reduce((total, item) => total + item.data.reduce(getSum));
但它returns不是总和,而是以Object
...
您需要为 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);
简直了
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 = data[0], b = data[1]
- 第二次调用:a = 运行 总数,b = 数据[2]
查看减少文档
第一个(外部)reduce 确实需要一个初始值,因为它的回调中的项目不是数字