按对象数组分组并计算键值的总数
Group By array of objects and calculate total for key value
我有一个对象数组:
let recipe = [
{
Type:"AAAA",
Total: 20
},
{
Type:"BBBB",
Total: 20,
},
{
Type:"BBBB",
Total: 20,
},
{
Type:"AAAA",
Total: 20,
},
{
Type:"AAAA",
Total: 20,
}
]
我想使用 javascript(无库)得到这样的最终形式:
let finalRecipe = [["AAAA",60],["BBBB",40]]
我试过用这个但没用
let recipeModified = recipe.reduce((r, timeoff) => {
const { Type, Total } = timeoff;
const totalSum = Object.values({
Total,
}).reduce((acc, val) => ([...acc, ...val], []));
r[Type] = [...(r[Type] || []), totalSum];
return r;
}, {})
https://codesandbox.io/s/cranky-ishizaka-i7m6v?file=/src/index.js
您可以使用函数 Array.prototype.reduce
按 Type
对对象进行分组,并使用函数 Object.values
提取分组的对象。
let recipe = [ { Type:"AAAA", Total: 20 }, { Type:"BBBB", Total: 20, }, { Type:"BBBB", Total: 20, }, { Type:"AAAA", Total: 20, }, { Type:"AAAA", Total: 20, }],
result = Object.values(recipe.reduce((r, {Type, Total}) => {
(r[Type] || (r[Type] = [Type, 0]))[1] += Total;
return r;
}, {}));
console.log(result);
我有一个对象数组:
let recipe = [
{
Type:"AAAA",
Total: 20
},
{
Type:"BBBB",
Total: 20,
},
{
Type:"BBBB",
Total: 20,
},
{
Type:"AAAA",
Total: 20,
},
{
Type:"AAAA",
Total: 20,
}
]
我想使用 javascript(无库)得到这样的最终形式:
let finalRecipe = [["AAAA",60],["BBBB",40]]
我试过用这个但没用
let recipeModified = recipe.reduce((r, timeoff) => {
const { Type, Total } = timeoff;
const totalSum = Object.values({
Total,
}).reduce((acc, val) => ([...acc, ...val], []));
r[Type] = [...(r[Type] || []), totalSum];
return r;
}, {})
https://codesandbox.io/s/cranky-ishizaka-i7m6v?file=/src/index.js
您可以使用函数 Array.prototype.reduce
按 Type
对对象进行分组,并使用函数 Object.values
提取分组的对象。
let recipe = [ { Type:"AAAA", Total: 20 }, { Type:"BBBB", Total: 20, }, { Type:"BBBB", Total: 20, }, { Type:"AAAA", Total: 20, }, { Type:"AAAA", Total: 20, }],
result = Object.values(recipe.reduce((r, {Type, Total}) => {
(r[Type] || (r[Type] = [Type, 0]))[1] += Total;
return r;
}, {}));
console.log(result);