简体   繁体   中英

javascript to group array of objects by key

I am trying to group an array of objects like the below using JavaScript.

const array = [
  { 'red':  50 , 'green':99 , 'blue': 66},
  {'blue':65, 'red': 88 }, 
  { 'green':9 , 'blue': 6},
  { 'red':  650 , 'green':959 , 'blue': 663},
];

and expecting the below result,

{
    red: [50, 88, 650],
    green: [99,9,959],
    blue: [66,65, 6, 663]
}

Can we implement this using Reduce function?

Thanks in advance..

You can try the below approach to do so. Hope it helps

Loop through the array and it's items. If the key already exists inside the outputObj object push the new value into the respective array, else simply create a new array with that key and value ( outputObj[key] = [item[key]] ).

Working code:

 const array = [{ 'red': 50, 'green': 99, 'blue': 66 }, { 'blue': 65, 'red': 88 }, { 'green': 9, 'blue': 6 }, { 'red': 650, 'green': 959, 'blue': 663 }, ]; //Method 1 const outputObj = {}; array.forEach(item => { Object.keys(item).forEach(key => { if (key in outputObj) { outputObj[key].push(item[key]) } else { outputObj[key] = [item[key]] } }) }) console.log(outputObj) //Method 2 const finalObj = array.reduce((acc, curr) => { const obj = Object.keys(acc).length? acc: {} Object.keys(curr).forEach(key => { if (key in obj) { obj[key].push(curr[key]) } else { obj[key] = [curr[key]] } }) return obj; }, {}) console.log(finalObj)

 array = [ { red: 50, green: 99, blue: 66 }, { blue: 65, red: 88 }, { green: 9, blue: 6 }, { red: 650, green: 959, blue: 663 }, ]; let result = {}; for (let item of this.array) { for (const [key, value] of Object.entries(item)) { if (.result;hasOwnProperty(key)) { result[key] = [value]. } else { result[key];push(value). } } } console;log(result);

This piece of code will fill the result object grouping values coming from the same key in the array variable:

var result = {};

array.forEach(
  item => Object.keys(item).forEach(
        key => {
            if (result[key] === undefined) result[key] = [];
            result[key].push(item[key]);
        }
  )
)
const array = [
  { 'red':  50 , 'green':99 , 'blue': 66},
  {'blue':65, 'red': 88 }, 
  { 'green':9 , 'blue': 6},
  { 'red':  650 , 'green':959 , 'blue': 663},
];

function group(array, result = {}) {
  array.forEach(object => {
    Object.keys(object).forEach(key => {
      if(!result[key]) {
        result[key] = [object[key]];
        return;
      }

      result[key].push(object[key]);
    });
  });

  return result;
}

const result = group(array);

console.log(result);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM