JavaScript - 对数组中具有相同名称的多个动态创建对象的值使用加法

JavaScript - Use addition on values of multiple dynamically created objects with same name in array

我有一个动态创建的对象数组(在 React 中,虽然我认为这不重要),并且我正在尝试对具有相同名称的值使用加法。

例如:

[{ n1:"1", n2:"2", n3:"3"},
 { n1:"4", n2:"6", n3:"4"},
 { n1:"3", n2:"1", n3:"2"}]

结果将是:

[{ n1:"8", n2:"9", n3:"9"}]

Spread Syntax 和 .assign 方法似乎可以完成此任务,但两个示例都有预定义的数组,而不是动态创建的数组。

如果能够更容易地解析数据以便每个名称都可以占据一个新数组,那也很好。 ie [n1:"8"],[n2:"9"],[n3:"9"]

您可以通过使用 key/value 对创建新对象并添加值来减少对象。

var data = [{ n1: "1", n2: "2", n3: "3"}, { n1: "4", n2: "6", n3: "4"}, { n1: "3", n2: "1", n3: "2"}],
    sums = data.reduce((target, source) => {
        Object.entries(source).forEach(([k, v]) => target[k] = (target[k] || 0) + +v);
        return target;    
    }, {});

console.log(sums);

可能有点简洁,但使用 flatMap() and reduce():

const data = [
  {n1:"1", n2:"2", n3:"3"},
  {n1:"4", n2:"6", n3:"4"},
  {n1:"3", n2:"1", n3:"2"}
];

const result = data.flatMap(Object.entries)
                   .reduce((a, [k, v]) => (a[k] = (a[k] || 0) + +v, a), {});

console.log(result);