0

I try merge object when they have same key. If they have same model_name, keep model_name, merge model_value. Here is the code:

let arr = [
   {
    model_name: 'random1',
    model_value: 'cloud',
    model_type: 1,
   },
   {
    model_name: 'random1',
    model_value: 'sea',
    model_type: 1,
   },
 {
    model_name: 'random2',
    model_value: 'tiger',
    model_type: 2,
   },
   {
    model_name: 'random2',
    model_value: 'lion',
    model_type: 2,
   },
   {
    model_name: 'random3',
    model_value: 'elephant',
    model_type: 3,
   }]

I want result look like below:

  arr = [
   {
    model_name: 'random1',
    model_value: ['cloud', 'sea'],
    model_type: 1,
   },
   {
    model_name: 'random2',
    model_value: ['tiger', 'lion'],
    model_type: 2,
   },
   {
    model_name: 'random3',
    model_value: ['elephant'],
    model_type: 3,
   }]

If object in array has same key model_name, then merge model_value. How to achieve this, thanks

Anderson Min
  • 89
  • 2
  • 12
  • Would it be fine if `elephant` was also in an array? Or do you need it as a string? – Nick Parsons Jul 28 '20 at 03:30
  • 1
    Yes, `elephant` in an array is fine. – Anderson Min Jul 28 '20 at 03:32
  • const newArr = Object.values( arr.reduce((acc, { model_name, model_value }) => { if (!acc[model_name]) { acc[model_name] = { model_name, model_value: [model_value] } } else { acc[model_name].model_value.push(model_value) } return acc }, {}) ) – Devon Norris Jul 28 '20 at 04:02

0 Answers0