Home > Software engineering >  Merge objects in array of objects based on id
Merge objects in array of objects based on id

Time:05-21

I have an array of objects like this How to achieve output form of this array ? Input:

[
 { meta_key: 'nickname', meta_value: 'testqa2', id: '10' },
  { meta_key: 'first_name', meta_value: 'TEST', id: '10' },
  { meta_key: 'last_name', meta_value: 'QA', id: '10' },
  { meta_key: 'nickname', meta_value: 'testqa10', id: '11' },
  { meta_key: 'first_name', meta_value: 'TEST', id: '11' },
  { meta_key: 'last_name', meta_value: 'QA', id: '11' }
]

Output

[
 {id:'10 , nickname:'testqa2 , first_name:'TEST' , last_name :'QA'},
 {id:'10 , nickname:'testqa10, first_name:'TEST' , last_name :'QA'}
]

CodePudding user response:

you can do it using reduce like this

const data = [
 { meta_key: 'nickname', meta_value: 'testqa2', id: '10' },
  { meta_key: 'first_name', meta_value: 'TEST', id: '10' },
  { meta_key: 'last_name', meta_value: 'QA', id: '10' },
  { meta_key: 'nickname', meta_value: 'testqa10', id: '11' },
  { meta_key: 'first_name', meta_value: 'TEST', id: '11' },
  { meta_key: 'last_name', meta_value: 'QA', id: '11' }
]


const result = Object.values(data.reduce((res, {id, meta_key, meta_value}) => {
  return {
    ...res,
    [id]: {
      id,
      ...res[id],
      [meta_key]: meta_value
    }
  
  }

}, {}))

console.log(result)

  • Related