Javascript 在数组中合并常用对象并添加频率
我有一个数组:Javascript 在数组中合并常用对象并添加频率,javascript,arrays,Javascript,Arrays,我有一个数组: [ { "id": "#1", "quantity": 2 }, { "id": "#2", "quantity": 1 }, { "id": "#3", "quantity": 1 }, { "id": "#1", "quantity": 2 }, { "id":
[
{
"id": "#1",
"quantity": 2
},
{
"id": "#2",
"quantity": 1
},
{
"id": "#3",
"quantity": 1
},
{
"id": "#1",
"quantity": 2
},
{
"id": "#2",
"quantity": 1
},
{
"id": "#3",
"quantity": 1
}
]
我希望结果是这样的
[
{
"id": "#1",
"quantity": 4
},
{
"id": "#2",
"quantity": 2
},
{
"id": "#3",
"quantity": 2
}
]
基本上是将相同ID的对象组合起来,并将数量相加。
我可以使用2个for循环来实现这一点。但是在Javascript中有没有更优化的方法来解决这个问题?一个选项是首先将数组缩减为一个对象,如果键相同,则添加数量,然后获取对象的值:
var-arr=[
{
“id”:“1”,
“数量”:2
},
{
“id”:“2”,
“数量”:1
},
{
“id”:“3”,
“数量”:1
},
{
“id”:“1”,
“数量”:2
},
{
“id”:“2”,
“数量”:1
},
{
“id”:“3”,
“数量”:1
}
]
console.log(
对象值(arr.reduce((obj,rec)=>{
if(对象[rec.id]==未定义){
obj[rec.id]=rec;
}否则{
对象[rec.id]。数量+=rec.quantity;
}
返回obj;
}, {}))
)
一个选项是首先将数组缩小为一个对象,如果键相同,则添加数量,然后获取对象的值:
var-arr=[
{
“id”:“1”,
“数量”:2
},
{
“id”:“2”,
“数量”:1
},
{
“id”:“3”,
“数量”:1
},
{
“id”:“1”,
“数量”:2
},
{
“id”:“2”,
“数量”:1
},
{
“id”:“3”,
“数量”:1
}
]
console.log(
对象值(arr.reduce((obj,rec)=>{
if(对象[rec.id]==未定义){
obj[rec.id]=rec;
}否则{
对象[rec.id]。数量+=rec.quantity;
}
返回obj;
}, {}))
)
类似的东西可以完成这项工作:
function transform(a) {
const seen = {};
const ret = [];
a.forEach(o => {
const id = o.id;
seen[id] = (seen[id] || 0) + o.quantity;
});
for (let key in seen) {
ret.push({
id: key,
quantity: seen[key]
});
}
return ret;
}
console.log(transform([{
"id": "#1",
"quantity": 2
}, {
"id": "#2",
"quantity": 1
}, {
"id": "#3",
"quantity": 1
}, {
"id": "#1",
"quantity": 2
}, {
"id": "#2",
"quantity": 1
}, {
"id": "#3",
"quantity": 1
}]));
像这样的东西可以完成任务:
function transform(a) {
const seen = {};
const ret = [];
a.forEach(o => {
const id = o.id;
seen[id] = (seen[id] || 0) + o.quantity;
});
for (let key in seen) {
ret.push({
id: key,
quantity: seen[key]
});
}
return ret;
}
console.log(transform([{
"id": "#1",
"quantity": 2
}, {
"id": "#2",
"quantity": 1
}, {
"id": "#3",
"quantity": 1
}, {
"id": "#1",
"quantity": 2
}, {
"id": "#2",
"quantity": 1
}, {
"id": "#3",
"quantity": 1
}]));
如果选择具有唯一关键点的对象,则会更容易->如果选择具有唯一关键点的对象,则会更容易->