I have this list:
const list = [ { name: 'AA', quantity: 1 }, { name: 'AA', quantity: 1 }, { name: 'BB', quantity: 1 }, { name: 'CC', quantity: 1 }, { name: 'CC', quantity: 2 }, ]
And the output I’m looking for should look like:
const newlist = [ { name: 'AA', quantity: 2 }, { name: 'BB', quantity: 1 }, { name: 'CC', quantity: 3 }, ]
This code removes duplicates, but I just can’t figure it out how to increase quantity when duplicate is present.
const setObj = new Set() const result = list.reduce((acc, item) => { if (!setObj.has(item.name)) { setObj.add(item.name) acc.push({ name: item.name, quantity: item.quantity }) } // for (const iterator of list) { // if (setObj.has(item.name)) { // console.log('🚀 ~ file: Untitled-1 ~ line 15 ~ iterator', iterator) // } // } console.log() return acc }, [])
Advertisement
Answer
Slightly different object approach that uses Object.values() to return resultant array
const list = [ { name: 'AA', quantity: 1 }, { name: 'AA', quantity: 1 }, { name: 'BB', quantity: 1 }, { name: 'CC', quantity: 1 }, { name: 'CC', quantity: 2 }, ] const group = {}; list.forEach(e => { const o = group[e.name] = group[e.name] || {...e, quantity: 0} o.quantity += e.quantity }) const res = Object.values(group) console.log(res)