Pratik Kumar
Pratik Kumar

Reputation: 63

Merge objects into array

I want to convert multiple objects with same id as test to array of objects

Actual:

const array= [
    { "test": 1},
    { "test": 2},
 { "test": 3},
 { "test": 4},
]

Expected:

test: [1,2,3,4]

Can someone please help

Upvotes: 0

Views: 86

Answers (5)

PeterKA
PeterKA

Reputation: 24638

const arr = [
  { "test": 1 },
  { "test": 2 },
  { "test": 3 },
  { "test": 4 },
  { "test1": 1 },
  { "test1": 5 },
  { "test2": 6 }
];
const newArr = arr.reduce((acc, cur) => ({
    ...acc, 
    [Object.keys(cur)[0]]: (acc[Object.keys(cur)[0]] || []).concat(Object.values(cur)[0])
}), {});

console.log( newArr );
//{ "test": [1,2,3,4], "test1": [1,5], "test2": [6] }

Upvotes: 0

Nina Scholz
Nina Scholz

Reputation: 386540

You could map the values from the object.

const
    array = [{ test: 1 }, { test: 2 }, { test: 3 }, { test: 4 }],
    values = array.flatMap(Object.values);

console.log(values);

Upvotes: 0

Rafael Mori
Rafael Mori

Reputation: 949

Just use the native method map (read more here or here) like this:

const array= [
  { "test": 1},
  { "test": 2},
  { "test": 3},
  { "test": 4},
];
const newArray = array.map(p => p.test);
console.log(JSON.stringify(newArray)); //[1,2,3,4]

Hope this helps.. ;D

Upvotes: 1

Crisoforo Gaspar
Crisoforo Gaspar

Reputation: 3830

const result = {};

yourArray.forEach( ( object ) => {
  const keys = Object.keys( object );
  for ( let i = 0; i < keys.length; i++ ) {
     const key = keys[ i ];
     if ( ! key in result ) { 
        result[ key ] = [];
     }
     result[key] = [...result[key], ...object[key] ];
  }
});

console.log( result );

In this case:

  1. You need to iterate in your array
  2. On each iteration you have a new object
  3. From there you iterate in all the keys of that current object
  4. If the key does not exists in your result create a new empty array
  5. Merge the value from the result with the current value of the object.
  6. Values are stored in result.

Upvotes: 0

Poku
Poku

Reputation: 3178

You can use the map function for this https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map :

const newarray = array.map(x => x.test);
console.log(newarray);

Upvotes: 0

Related Questions