I have an obj array like this:
[
{
"feeTypeTitle": "STORAGE",
"itemFees": [
{
"idx": 0,
"itemTitle": "Apple iPhone 11 128GB",
"itemFee": 4,
"feeType": "STORAGE"
},
{
"idx": 1,
"itemTitle": "Sony FWD-40WD650/T",
"itemFee": 4,
"feeType": "STORAGE"
},
{
"idx": 1,
"itemTitle": "Sony FWD-40WD650/T",
"itemFee": 2,
"feeType": "STORAGE"
}
]
},
{
"feeTypeTitle": "VERIFICATION",
"itemFees": [
{
"idx": 0,
"itemTitle": "Apple iPhone 11 128GB",
"itemFee": 5,
"feeType": "VERIFICATION"
},
{
"idx": 1,
"itemTitle": "Sony FWD-40WD650/T",
"itemFee": 5,
"feeType": "VERIFICATION"
}
]
}
]
You can see in STORAGE, there are 2 items that same title, idx number. I want to merge and sum the itemFee of these duplicates and return same array structure. The result I want is:
[
{
"feeTypeTitle": "STORAGE",
"itemFees": [
{
"idx": 0,
"itemTitle": "Apple iPhone 11 128GB",
"itemFee": 4,
"feeType": "STORAGE"
},
{
"idx": 1,
"itemTitle": "Sony FWD-40WD650/T",
"itemFee": 6, // <- sum value
"feeType": "STORAGE"
}
]
},
{
"feeTypeTitle": "VERIFICATION",
"itemFees": [
{
"idx": 0,
"itemTitle": "Apple iPhone 11 128GB",
"itemFee": 5,
"feeType": "VERIFICATION"
},
{
"idx": 1,
"itemTitle": "Sony FWD-40WD650/T",
"itemFee": 5,
"feeType": "VERIFICATION"
}
]
}
]
How do I do this with vanilla js, ES6?
Thank you for help
>Solution :
You can do:
const data = [{feeTypeTitle: 'STORAGE',itemFees: [{idx: 0,itemTitle: 'Apple iPhone 11 128GB',itemFee: 4,feeType: 'STORAGE',},{idx: 1,itemTitle: 'Sony FWD-40WD650/T',itemFee: 4,feeType: 'STORAGE',},{idx: 1,itemTitle: 'Sony FWD-40WD650/T',itemFee: 2,feeType: 'STORAGE',},],},{feeTypeTitle: 'VERIFICATION',itemFees: [{idx: 0,itemTitle: 'Apple iPhone 11 128GB',itemFee: 5,feeType: 'VERIFICATION',},{idx: 1,itemTitle: 'Sony FWD-40WD650/T',itemFee: 5,feeType: 'VERIFICATION',},],},]
const result = data.map((o) => {
const itemFeesHash = o.itemFees.reduce((a, c) => {
a[c.idx] = a[c.idx] || { ...c, itemFee: 0 }
a[c.idx].itemFee += c.itemFee
return a
}, {})
o.itemFees = Object.values(itemFeesHash)
return o
})
console.log(result)