我想使用javascript使用forEach,map,reduce函数对每个子数组执行求和运算,这样最终我的输出应该如下所示:
sum = [8,13,22]
但我没有得到所需的输出。请在我出错的地方帮忙。谢谢。
var Data = [{"a":1,"b":2,"c":5},{"a":3,"b":4,"c":6},{"a":6,"b":7,"c":9}];
var newArr = [];
Data.forEach(function(item) {
item = item.reduce(function(a, b) {
return a + b;
});
newArr.push([item]);
});
console.log(newArr);
答案 0 :(得分:4)
您可以精确地映射总和值。
var data = [{ a: 1, b: 2, c: 5 }, { a: 3, b: 4, c: 6 }, { a: 6, b: 7, c: 9 }],
result = data.map(o => Object.values(o).reduce((a, b) => a + b));
console.log(result);
给定代码的一些注释:
您无法使用reduce
迭代对象,因为这仅适用于数组。要解决这个问题,您需要通过Object.values
获取对象的值,然后可以迭代这些值。
然后返回总和而不将其包装在数组中。
var Data = [{"a":1,"b":2,"c":5},{"a":3,"b":4,"c":6},{"a":6,"b":7,"c":9}];
var newArr = [];
Data.forEach(function(item) {
var sum = Object.values(item).reduce(function(a, b) {
return a + b;
});
newArr.push(sum);
});
console.log(newArr);
更好的解决方案是使用Array#map
,因为数组的每个元素都需要一个值。
var data = [{"a":1,"b":2,"c":5},{"a":3,"b":4,"c":6},{"a":6,"b":7,"c":9}];
newArr = data.map(function(item) {
return Object.values(item).reduce(function(a, b) {
return a + b;
});
});
console.log(newArr);
答案 1 :(得分:0)
根据你的例子,Old way
var Data = [{"a":1,"b":2,"c":5},{"a":3,"b":4,"c":6},{"a":6,"b":7,"c":9}];
var newArr = [];
Data.forEach(function(object) {
let sum = 0;
for (var property in object) {
if (object.hasOwnProperty(property)) {
sum += object[property]
}
}
newArr.push(sum);
});
console.log(newArr);