首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用reduce将JavaScript中集合对象的属性值相加

使用reduce将JavaScript中集合对象的属性值相加
EN

Stack Overflow用户
提问于 2018-06-07 05:03:00
回答 2查看 684关注 0票数 2

非常直截了当:

代码语言:javascript
复制
var bar = [
  { a: 10, b: 20 }, { a: 10, b: 20 }
];

var reduce = bar.reduce((acc, item) => {
  acc['a'] = item.a++;
  acc['b'] = item.b++
  return acc;
}, {});

 console.log(reduce);
 {a: 10, b: 20}

我希望reduce指定引用:{a:20, b: 40}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-07 05:12:35

这是一个通用的解决方案,即使数组中的对象包含不同的属性也可以使用。

代码语言:javascript
复制
var bar = [
  { a: 10, b: 20 }, { a: 10, b: 20 }
];

var reduce = bar.reduce((acc, item) => {
  for (let [key, value] of Object.entries(item)){
    if( acc.hasOwnProperty(key)) {
        acc[key] += value
     }
     else {
      acc = {...acc, [key]: value }
     }
  }
  return acc;
}, {});

 console.log(reduce);

票数 1
EN

Stack Overflow用户

发布于 2018-06-07 05:11:28

您可以返回一个具有附加值的新对象。

代码语言:javascript
复制
var bar = [{ a: 10, b: 20 }, { a: 10, b: 20 }],
    reduce = bar.reduce((a, b) => ({ a: a.a + b.a, b: a.b + b.b }));

console.log(reduce);

或者使用针对所有属性的完全动态方法。

代码语言:javascript
复制
const add = (a, b) =>
        Object.assign({}, a, ...Object.entries(b).map(([k, v]) => ({ [k]: a[k] + v })));
var bar = [{ a: 10, b: 20 }, { a: 10, b: 20 }],
    reduce = bar.reduce(add);

console.log(reduce);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50729555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档