const array = [
{
"userId": 2,
"firstName": "AAAAA",
"price": 1234,
el:[1,2,3]
},
{
"userId": 2,
"firstName": "BBBB",
"price": 1234,
el:[1,2,3]
},
{
"userId": 3,
"firstName": "CCCCC",
"price": 1,
el:[1,2,3]
},
{
"userId": 3,
"firstName": "DDDDD",
"price": 2,
el:[1,2,3]
},
{
"userId": 3,
"firstName": "eee",
"price": 2,
el:[1,2,3]
},
{
"userId": 4,
"firstName": "EEEEE",
"price": 5,
el:[1,2,3]
}
]
const res = array.reduce((finalArr, current) => {
let obj = finalArr.find((item) => item.userId === current.userId);
if(obj){
obj.price = obj.price + current.price
return finalArr
}
return finalArr.concat([current])
}, [])
- 특정 키와 일치하는 객체를 찾아 있으면 그대로 리턴, 일치하지 않을 경우 최종 배열에 합쳐버리기
const reducedArr = array.reduce((obj, item)=>{
obj[item.userId] ? obj[item.userId].el.push(...item.el) :
obj[item.userId] = item
return obj
},{})
console.log('reducedArr->', Object.values(reducedArr))
const removeArr =
Object.values(array.reduce((obj,item)=> {
if(!obj[item.userId]) {
obj[item.userId] = {...item, count:0}
} else {
obj[item.userId].price += item.price
obj[item.userId].count ++
}
return obj
}, {}))
console.log(removeArr)