添加对象数组javascript的值

Posted

技术标签:

【中文标题】添加对象数组javascript的值【英文标题】:Adding up the values of an array of objects javascript 【发布时间】:2020-09-14 00:53:05 【问题描述】:

我有一个这样的对象数组:const array=[a:1, b:1 , a:2, b:3 ,a:1, b:1]

我想要一个像 results = [a:4 , b:5] 这样的数组,它是根据键来自对象数组的所有值的总和。

我尝试过这样的事情,但有时它会跳过数组中的第一个对象:

       array.reduce((acc, n) => 
          for (var prop in n) 
            if (acc.hasOwnProperty(prop)) acc[prop] += n[prop];
            else acc[prop] = 0;
          
          return acc;
        , )

【问题讨论】:

【参考方案1】:

你需要在分配之前初始化acc,所以下面的小修改就可以了

 const array=[a:1, b:1 , a:2, b:3 ,a:1, b:1]
 const res = array.reduce((acc, n) => 
          for (var prop in n) 
          acc[prop] = acc[prop] || 0; // Need to initialize before assigning
            if (n.hasOwnProperty(prop)) 
                 acc[prop] += n[prop];
                
          
          return acc;
        , )
console.log(res);

【讨论】:

【参考方案2】:

这会起作用

const res = [a:1, b:1, c: 1 , a:2, b:3, c:3 ,a:1, b:1, c: 3].reduce((a,v,i) => 
    for(let key in v) 
      a[key] = a[key] ? a[key] + v[key] : v[key];
    
    return a
,)

console.log(res)

【讨论】:

静态指定对象属性似乎不是最好的解决方案,因为我相信他的示例对象(obj.a、obj.b 等)可能是他正在处理的内容的简化版本生产。 是的,同意...感谢您的宝贵意见..我已经更新了答案【参考方案3】:

您可以使用此代码,而不必手动指定对象属性,如果它不存在,它将创建一个新属性,如果存在则添加到现有属性。

var myarr = [a: 2, b: 3, a:3, b:2];
var newobj = ;

for (var i=0; i <= myarr.length; i += 1)   
  for (var p in myarr[i]) newobj[p] = (p in newobj) ? 
    newobj[p] + myarr[i][p] : myarr[i][p]
    
console.log(newobj);

【讨论】:

【参考方案4】:

使用forEachObject.entries 会简化。

const array = [
   a: 1, b: 1 ,
   a: 2, b: 3 ,
   a: 1, b: 1 ,
];

const acc = (arr) => 
  const res = ;
  arr.forEach((obj) =>
    Object.entries(obj).forEach(
      ([key, value]) => (res[key] = key in res ? res[key] + value : value)
    )
  );
  return [res];
;

console.log(acc(array));

【讨论】:

以上是关于添加对象数组javascript的值的主要内容,如果未能解决你的问题,请参考以下文章

javaScript数组对象

JavaScript原生对象属性和方法详解——Array对象 转载

利用JavaScript去掉数组中重复项

JavaScript原生对象属性和方法详解——Array对象

如何将一个对象数组的一个属性的值分配给另一个对象数组的同名属性? - Javascript

Javascript:从包含对象的多维数组中返回不匹配的值