'group the object in array by name [duplicate]
let obj = [
{
name: "a",
quantity: 2
},
{
name: "b",
quantity: 4
},
{
name: "c",
quantity: 88
}
]
let obj2 = [
{
name: "a",
quantity: 2
}
]
I want to group two object array but if object which has a same name already exists then merge.
For example, there are objects which name is "a" and I want to merge them together.
Output what I want is like
[
{
name: "a",
quantity: 4
},
{
name: "b",
quantity: 4
},
{
name: "c",
quantity: 88
}
]
The quantity of object which name is "a" is add together. Is there anyway to do this?
Solution 1:[1]
You can use forEach() for this.
let obj = [
{
name: "a",
quantity: 2
},
{
name: "b",
quantity: 4
},
{
name: "c",
quantity: 88
}
]
let obj2 = [
{
name: "a",
quantity: 2
}
]
obj.forEach((element)=>{
obj2.forEach((e)=>{
if(element.name == e.name){
element.quantity = element.quantity+e.quantity
}
})
})
console.log(obj);
Solution 2:[2]
let obj = [
{
name: "a",
quantity: 2
},
{
name: "b",
quantity: 4
},
{
name: "c",
quantity: 88
}
]
let obj2 = [
{
name: "a",
quantity: 2
}
]
let obj3 = [...obj, ...obj2];
let obj4 = obj3.reduce( (curr, ele) => {
let exist = curr.filter( cur => cur.name == ele.name)
if (exist.length) exist[0].quantity += ele.quantity
else curr.push(ele)
return curr
}, [])
console.log(obj4)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Sumit Sharma |
| Solution 2 | Xupitan |
