Lus*_*ney 3 javascript arrays object
假设我有一个对象数组:
[
{
category: 'Category A',
mainUnits: 5,
subUnits: 3
},
{
category: 'Category A',
mainUnits: 9,
subUnits, 12
},
{
category: 'Category B',
mainUnits: 4,
subUnits, 6
},
{
category: 'Category B',
mainUnits: 2,
subUnits, 4
}
]
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法获得如下所示的数组:
[
{
category: 'Category A',
mainUnits: 14,
subUnits: 15
},
{
category: 'Category B',
mainUnits: 6,
subUnits: 10
}
]
Run Code Online (Sandbox Code Playgroud)
我已经取得了一些进展,但不能完全得到我需要的确切结果.非常感谢任何指导,谢谢!
该.reduce
阵列的方法似乎是一个不错的选择这里.
使用数组.find
方法查看结果中是否已存在具有该类别的项目.如果是,请添加字段,但如果不是,请将项添加到结果中:
const input = [{
category: 'Category A',
mainUnits: 5,
subUnits: 3
}, {
category: 'Category A',
mainUnits: 9,
subUnits: 12,
}, {
category: 'Category B',
mainUnits: 4,
subUnits: 6,
}, {
category: 'Category B',
mainUnits: 2,
subUnits: 4,
}];
const result = input.reduce((result, item) => {
const existing = result.find(x => x.category === item.category);
if (existing) {
existing.mainUnits += item.mainUnits;
existing.subUnits += item.subUnits;
} else {
result.push(item);
}
return result;
}, []);
console.log(result);
Run Code Online (Sandbox Code Playgroud)
@ CRice的答案很棒,但如果你愿意,这是另一种方法:
const input = [{
category: 'Category A',
mainUnits: 5,
subUnits: 3
}, {
category: 'Category A',
mainUnits: 9,
subUnits: 12
}, {
category: 'Category B',
mainUnits: 4,
subUnits: 6
}, {
category: 'Category B',
mainUnits: 2,
subUnits: 4
}];
let sums = {};
for (let entry of input) {
sums[entry.category] = sums[entry.category] || {
mainUnits: 0,
subUnits: 0
};
sums[entry.category].mainUnits += entry.mainUnits;
sums[entry.category].subUnits += entry.subUnits;
}
const result = Object.keys(sums).map(category => Object.assign({
category
}, sums[category]));
console.log(result);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1017 次 |
最近记录: |