dev*_*per 2 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}
]
Run Code Online (Sandbox Code Playgroud)
我想添加一个包含数组中类别总和的总行。
例子:
[
{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}
]
Run Code Online (Sandbox Code Playgroud)
我尝试使用Object.keys. 但是,感觉可能有更简单的方法来实现这一目标。
计算总行的最佳方法是什么?
请注意,“2021 年 4 月”、“2021 年 3 月”不是固定的,因此我无法对它们进行硬编码。
请注意,“2021 年 4 月”、“2021 年 3 月”不是固定的,因此我无法对它们进行硬编码。
在您的情况下,属性是动态的。您可以通过 2 个步骤尝试这种方式:
Array#reduce循环数组中的所有对象object,您通过迭代对每个属性的值求和,object因为动态属性是这样的for(const [key, value] of Object.entries(curr)
Run Code Online (Sandbox Code Playgroud)
for(const [key, value] of Object.entries(curr)
Run Code Online (Sandbox Code Playgroud)
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}]);Run Code Online (Sandbox Code Playgroud)