将对象合并到数组中并添加值。 JavaScript / node.js

时间:2019-01-19 00:50:28

标签: javascript arrays node.js object

有没有办法转身

[ { JavaScript: 41837, Batchfile: 47 },
  { 'C#': 7484 },
  { Batchfile: 110 },
  { Scala: 50597 },
  { Java: 18180 },
  { Java: 55689 } ]

进入:

{ 
JavaScript: 41837,
Batchfile: 157,
'C#': 7484
Scala: 50597,
Java: 73869
}

每次运行应用程序时,数组的大小都不同。

3 个答案:

答案 0 :(得分:3)

reduce是你的朋友

const list = [ { JavaScript: 41837, Batchfile: 47 },
  { 'C#': 7484 },
  { Batchfile: 110 },
  { Scala: 50597 },
  { Java: 18180 },
  { Java: 55689 } ];
const summed = list.reduce((totals, obj) => {
  Object.keys(obj).forEach(k => {
    const cur = totals[k] || 0;
    totals[k] = cur + obj[k];
  });
  return totals;
}, {});
   console.log(summed);

答案 1 :(得分:0)

制作一个新对象。遍历输入数组中的每个对象。对于每个对象,遍历该对象的键。如果它们的键存在于您的新对象中,请添加值,否则将键和值添加至新对象;

var arr = [ { JavaScript: 41837, Batchfile: 47 },
  { 'C#': 7484 },
  { Batchfile: 110 },
  { Scala: 50597 },
  { Java: 18180 },
  { Java: 55689 } ]
  
var result = {}

arr.forEach(function(group){
  Object.keys(group).forEach(function(key){
    if(result[key]) {
      result[key] += group[key];
    } else {
      result[key] = group[key];
    }
  })
});

console.log(result);

答案 2 :(得分:0)

Array reduce与For in结合使用可以遍历对象中的对象键。

a = [ { JavaScript: 41837, Batchfile: 47 },
  { 'C#': 7484 },
  { Batchfile: 110 },
  { Scala: 50597 },
  { Java: 18180 },
  { Java: 55689 } ]

  result = {}

  b = a.reduce((result, item) => {
    for (let eachKey in item) {
      const curSum = result[eachKey] || 0;;
      result[eachKey] = curSum + item[eachKey];
    }
    return result;
  }, result)