Javascript 从功能上总结收集

Javascript 从功能上总结收集,javascript,Javascript,有人能提出一种功能性的方法吗?可能使用reduce()? 如果名称、重量和研磨度相同,则将数量添加到汇总集合中。也许是洛达斯 let bigOrder=[ {名称:“家庭混合”,数量:1,重量:“250g”,研磨:“全豆”}, {名称:“内部混合”,数量:3,重量:“250g”,研磨:“过滤”}, {名称:“无咖啡因”,数量:1,重量:“250克”,研磨:“全豆”}, {名称:“哥伦比亚”,数量:4,重量:“250克”,研磨:“家用浓缩咖啡”}, {名称:“无咖啡因”,数量:1,重量:“250

有人能提出一种功能性的方法吗?可能使用
reduce()
? 如果名称、重量和研磨度相同,则将数量添加到汇总集合中。也许是洛达斯

let bigOrder=[
{名称:“家庭混合”,数量:1,重量:“250g”,研磨:“全豆”},
{名称:“内部混合”,数量:3,重量:“250g”,研磨:“过滤”},
{名称:“无咖啡因”,数量:1,重量:“250克”,研磨:“全豆”},
{名称:“哥伦比亚”,数量:4,重量:“250克”,研磨:“家用浓缩咖啡”},
{名称:“无咖啡因”,数量:1,重量:“250克”,研磨:“全豆”},
{名称:“内部混合”,数量:2,重量:“250g”,研磨:“过滤”},
{名称:“哥伦比亚”,数量:1,重量:“250克”,研磨:“过滤器”},
{名称:“无咖啡因”,数量:1,重量:“250g”,研磨:“柱塞”},
{名称:“哥伦比亚”,数量:3,重量:“1kg”,研磨:“全豆”},
{名称:“哥伦比亚”,数量:1,重量:“250克”,研磨:“全豆”},
{名称:“无咖啡因”,数量:1,重量:“250g”,研磨:“柱塞”},
{名称:“内部混合”,数量:5,重量:“1kg”,研磨:“过滤”},
{名称:“内部混合”,数量:5,重量:“1kg”,研磨:“过滤”},
{名称:“内部混合”,数量:4,重量:“250g”,研磨:“过滤”}
];
常量摘要顺序=()=>{
让summary=[];
bigOrder.forEach(行=>{
函数比较器(a,b){
返回a.name==b.name&&a.weight==b.weight&&a.grind==b.grind;
}
让index=summary.findIndex(e=>comparator(e,line));
如果(索引>0){
汇总[索引]。数量+=行。数量;
}否则{
推(线);
}
});
返回摘要;
};

log(summarseOrder())
您可以使用
reduce
,方法是从名称、重量和研磨创建一个键-如果累加器对象中已经存在所述键,则将该键添加到已存在对象中的
.quantity
,最后获取该对象的值:

let bigOrder=[
{名称:“家庭混合”,数量:1,重量:“250g”,研磨:“全豆”},
{名称:“内部混合”,数量:3,重量:“250g”,研磨:“过滤”},
{名称:“无咖啡因”,数量:1,重量:“250克”,研磨:“全豆”},
{名称:“哥伦比亚”,数量:4,重量:“250克”,研磨:“家用浓缩咖啡”},
{名称:“无咖啡因”,数量:1,重量:“250克”,研磨:“全豆”},
{名称:“内部混合”,数量:2,重量:“250g”,研磨:“过滤”},
{名称:“哥伦比亚”,数量:1,重量:“250克”,研磨:“过滤器”},
{名称:“无咖啡因”,数量:1,重量:“250g”,研磨:“柱塞”},
{名称:“哥伦比亚”,数量:3,重量:“1kg”,研磨:“全豆”},
{名称:“哥伦比亚”,数量:1,重量:“250克”,研磨:“全豆”},
{名称:“无咖啡因”,数量:1,重量:“250g”,研磨:“柱塞”},
{名称:“内部混合”,数量:5,重量:“1kg”,研磨:“过滤”},
{名称:“内部混合”,数量:5,重量:“1kg”,研磨:“过滤”},
{名称:“内部混合”,数量:4,重量:“250g”,研磨:“过滤”}
];
const summaryseorder=arr=>Object.values(arr.reduce(
(a,obj)=>{
常量键=`${obj.name}{obj.weight}{obj.grind}`;
如果(!a[key])a[key]=obj;
否则为[key].quantity+=obj.quantity;
返回a;
}, {}
));

console.log(summarseOrder(bigOrder))
您可以使用
reduce
,方法是从名称、重量和研磨创建一个键-如果累加器对象中已经存在所述键,则将该键添加到已存在对象中的
.quantity
,最后获取该对象的值:

let bigOrder=[
{名称:“家庭混合”,数量:1,重量:“250g”,研磨:“全豆”},
{名称:“内部混合”,数量:3,重量:“250g”,研磨:“过滤”},
{名称:“无咖啡因”,数量:1,重量:“250克”,研磨:“全豆”},
{名称:“哥伦比亚”,数量:4,重量:“250克”,研磨:“家用浓缩咖啡”},
{名称:“无咖啡因”,数量:1,重量:“250克”,研磨:“全豆”},
{名称:“内部混合”,数量:2,重量:“250g”,研磨:“过滤”},
{名称:“哥伦比亚”,数量:1,重量:“250克”,研磨:“过滤器”},
{名称:“无咖啡因”,数量:1,重量:“250g”,研磨:“柱塞”},
{名称:“哥伦比亚”,数量:3,重量:“1kg”,研磨:“全豆”},
{名称:“哥伦比亚”,数量:1,重量:“250克”,研磨:“全豆”},
{名称:“无咖啡因”,数量:1,重量:“250g”,研磨:“柱塞”},
{名称:“内部混合”,数量:5,重量:“1kg”,研磨:“过滤”},
{名称:“内部混合”,数量:5,重量:“1kg”,研磨:“过滤”},
{名称:“内部混合”,数量:4,重量:“250g”,研磨:“过滤”}
];
const summaryseorder=arr=>Object.values(arr.reduce(
(a,obj)=>{
常量键=`${obj.name}{obj.weight}{obj.grind}`;
如果(!a[key])a[key]=obj;
否则为[key].quantity+=obj.quantity;
返回a;
}, {}
));
console.log(summarseOrder(bigOrder))