【问题标题】:JavaScript - Use addition on values of multiple dynamically created objects with same name in arrayJavaScript - 对数组中具有相同名称的多个动态创建的对象的值使用加法
【发布时间】:2020-06-03 08:06:39
【问题描述】:

我有一个动态创建的对象数组(在 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"]

【问题讨论】:

  • 到目前为止您尝试过什么?这可以通过 (for 循环或 .forEach().reduce()) + (for...in...Object.keys() or Object.entries()`) 来完成

标签: javascript assign spread


【解决方案1】:

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

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);

【讨论】:

    【解决方案2】:

    可能有点简洁,但使用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);

    【讨论】:

      猜你喜欢
      • 2013-04-05
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多