javascript - 使用 JavaScript 中的动态属性对数组中的所有对象项求和

标签 javascript arrays dynamic

我有以下数组:

[
     {category: 'Category 1', 'Apr 2021' : 10, 'Mar 2021' : 20, 'Feb 2021': 5},
     {category: 'Category 2', 'Apr 2021' : 8, 'Mar 2021' : 2, 'Feb 2021': 15},
     {category: 'Category 3', 'Apr 2021' : 7, 'Mar 2021' : 1, 'Feb 2021': 5}
]

我想添加一个包含数组中类别总和的总行。

例子:

[
     {category: 'Category 1', 'Apr 2021' : 10, 'Mar 2021' : 20, 'Feb 2021': 5},
     {category: 'Category 2', 'Apr 2021' : 8, 'Mar 2021' : 2, 'Feb 2021': 15},
     {category: 'Category 3', 'Apr 2021' : 7, 'Mar 2021' : 1, 'Feb 2021': 5},
     {category: 'Total',      'Apr 2021' : 25, 'Mar 2021' : 23, 'Feb 2021': 30}
]

我尝试使用 Object.keys 遍历所有列。但是,感觉可能有更简单的方法来实现这一目标。

计算总行数的最佳方法是什么?

请注意,“2021 年 4 月”、“2021 年 3 月”不是固定的,因此我无法对它们进行硬编码。

最佳答案

Please note that "Apr 2021", "Mar 2021" are not fixed so I won't be able to hardcode them.

在您的情况下,属性是动态的。您可以通过 2 个步骤尝试这种方式:

  1. 使用Array#reduce循环数组的所有对象
  2. 在每个 object 中,由于像这样的动态属性,您通过迭代 object 来求和每个属性的值
for(const [key, value] of Object.entries(curr)

const array = [
     {category: 'Category 1', 'Apr 2021' : 10, 'Mar 2021' : 20, 'Feb 2021': 5},
     {category: 'Category 2', 'Apr 2021' : 8, 'Mar 2021' : 2, 'Feb 2021': 15},
     {category: 'Category 3', 'Apr 2021' : 7, 'Mar 2021' : 1, 'Feb 2021': 5}
];
const total = array.reduce((acc, curr) => {
  for(const [key, value] of Object.entries(curr)){
    if (key !== 'category') {
      acc[key] ??= 0;
      acc[key] += value;
    }
  }
  
  return acc;
}, {});
console.log([...array, {category: "Total", ...total}]);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 使用 JavaScript 中的动态属性对数组中的所有对象项求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67018145/

相关文章:

javascript - 在 Typescript 中向基类添加扩展

javascript - jQuery 在单击时将数组中的项目移动到索引 0

javascript - Jquery Javascript 对象 - 将某些值与另一个类似对象进行比较并替换

ruby - 枚举器 `Array#each` 's {block} can' t 总是更改数组值?

c# - RDLC,基于参数的动态图片,c#

java - 如何动态创建类文件?

Javascript - 只选择字符串中的特定模式

JavaScript数据结构: Object oriented or array?

javascript - D3 链接在特殊删除情况下中断

C# 4.0 : dynamic 'this' pointer