JavaScript - 在数组中对多个同名动态创建的对象的值进行加法。

问题描述 投票:-1回答:1

我有一个动态创建的对象数组(在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方法似乎可以达到这个目的 但这两个例子都是预定义的数组 而不是动态创建的数组

如果能更容易地解析数据,使每个名字都能占据一个新的数组,那也不错。 [n1:"8"],[n2:"9"],[n3:"9"]

javascript assign spread
1个回答
0
投票

也许有点简洁,但使用 flatMap()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);

2
投票

你可以通过创建一个带有键值对的新对象并添加值来减少对象。

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);
© www.soinside.com 2019 - 2024. All rights reserved.