我有一个包含2个对象的数组。
var sum = [{a:1, b:2, c:3, d:4},{a:2, b:3, c:4, d:5}];
如何仅使用reduce/map/filter/forEach函数对每个对象中的值求和?
输出应为[10, 14]
发布于 2017-02-10 08:05:33
您可以通过迭代此对象的键并添加所有属性的值来映射对象和值。
使用的方法:
用于为每个item
Object.keys
返回结果的Array#map
,用于获取objectArray#reduce
的所有自有属性,用于求和的值
var data = [{ a: 1, b: 2, c: 3, d: 4 }, { a: 2, b: 3, c: 4, d: 5 }],
sum = data.map(function (object) {
return Object.keys(object).reduce(function (sum, key) {
return sum + object[key];
}, 0);
});
console.log(sum);
不带键的Sum 'a'
var data = [{ a: 1, b: 2, c: 3, d: 4 }, { a: 2, b: 3, c: 4, d: 5 }],
sum = data.map(function (object) {
return Object.keys(object).reduce(function (sum, key) {
return sum + (key !== 'a' && object[key]);
}, 0);
});
console.log(sum);
发布于 2017-02-10 08:07:29
使用函数的简短解决方案:
var sum = [{a:1, b:2, c:3, d:4},{a:2, b:3, c:4, d:5}],
result = sum.reduce(function (r, o) {
r.push(Object.keys(o).reduce(function(r, b){ return r + o[b]; }, 0));
return r;
}, []);
console.log(result);
发布于 2017-02-10 08:10:31
在下面的代码中,o
是数组中的每个对象,t
是累加和,p
是要添加的对象的属性。
const sum = [{a:1, b:2, c:3, d:4},{a:2, b:3, c:4, d:5}];
const result = sum.map(o => Object.keys(o).reduce((t, p) => t + o[p], 0));
console.log(result);
https://stackoverflow.com/questions/42154320
复制相似问题