Javascript 如何从一个具有相同id的数组中删除多个项目,但在增加其“数量”的同时保留一个项目?
我有这样一个数组:Javascript 如何从一个具有相同id的数组中删除多个项目,但在增加其“数量”的同时保留一个项目?,javascript,arrays,object,Javascript,Arrays,Object,我有这样一个数组: const arr = [ { price: 12, desc: 'desc', id: 123, qty: 1 }, { price: 12, desc: 'desc', id: 123, qty: 1 }, { price: 12, desc: 'desc', id: 123, qty: 1 } ]; 我希望能够删除x个数量的项目,直到只剩下一个id为123的项目。然而,我也想增加该项目的数量,无论有多少其他项目有相同的id 例如,我想要一个这样的结果数组: const
const arr = [
{ price: 12, desc: 'desc', id: 123, qty: 1 },
{ price: 12, desc: 'desc', id: 123, qty: 1 },
{ price: 12, desc: 'desc', id: 123, qty: 1 }
];
我希望能够删除x个数量的项目,直到只剩下一个id为123的项目。然而,我也想增加该项目的数量,无论有多少其他项目有相同的id
例如,我想要一个这样的结果数组:
const result = [ { price: 12, desc: 'desc', id: 123, qty: 3 } ];
您可以使用函数reduce对匹配的ID进行分组和计数
const arr=[{price:12,desc:'desc',id:123,qty:1},{price:12,desc:'desc',id:123,qty:1},{price:12,desc:'desc',id:123,qty:1}];
//函数Object.values返回每个对象的值,例如:
//累加器={
//123:{price:12,desc:'desc',id:123,qty:3}
// }
//函数Object.values返回:
//{价格:12,描述:'desc',id:123,数量:3}
const result=Object.valuesarr.reducea,c=>{
//累加器“a”将包含以下对象:
//{'123':{id:123,desc:'desc'..,数量:2}}
//此行检查具有“c.id”的当前对象
//如果该对象不存在,将使用创建一个新对象
//另一个名为“qty”的属性,然后我们添加+1
a[c.id]| | a[c.id]=Object.assignc,{qty:0}.qty++;
返回a;
}, {};
console.logresult;
.作为控制台包装{最大高度:100%!重要;顶部:0;}到目前为止您尝试了什么?请添加您的代码您介意解释一下reduce是如何使用此功能的吗?以及reduce中的内容在做什么。我是一个JS noob。谢谢@Ele,我认为这很有帮助!