2

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.

1 Answer 1

4

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 }

Sign up to request clarification or add additional context in comments.

2 Comments

This solution removes the 6th element of the array as well. I want to remove/group only the consecutive objects.
@AritraGanguly updated...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.