I have a main array -
const arr = [
{ description: 'Senior', amount: 50 },
{ description: 'Senior', amount: 50 },
{ description: 'Adult', amount: 75 },
{ description: 'Adult', amount: 35 },
{ description: 'Infant', amount: 25 },
{ description: 'Senior', amount: 150 }
]
I want help with an es6 operation which will add the amount based on the key(description) and remove the duplicates.
Result array will somewhat look like -
const newArr = [
{ description: 'Senior', amount: 100 },
{ description: 'Adult', amount: 110 },
{ description: 'Infant', amount: 25 },
{ description: 'Senior', amount: 150 }
]
Please note, the grouping will be done only on consecutive objects with similar key.
I have been using the reduce operator to achieve this using the solution, but that removes the non-consecutive objects as well.
It would be really helpful if someone can help me with some es6 operators to perform the same operation.
CodePudding user response:
this way
const arr =
[ { description: 'Senior', amount: 50 }
, { description: 'Senior', amount: 50 }
, { description: 'Adult', amount: 75 }
, { description: 'Adult', amount: 35 }
, { description: 'Infant', amount: 25 }
, { description: 'Senior', amount: 150 }
]
const newArr =
arr.reduce((res,{description,amount},i,{[i-1]:prev})=>
{
if (!prev || description != prev.description )
res.push({description,amount})
else
res[res.length-1].amount = amount
return res
},[])
console.log( newArr )
.as-console-wrapper {max-height: 100%!important;top:0 }