简体   繁体   English

javascript 按键对对象数组进行分组

[英]javascript to group array of objects by key

I am trying to group an array of objects like the below using JavaScript.我正在尝试使用 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?我们可以使用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.遍历array及其项。 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]] ).如果键已经存在于outputObj object 中,则将新值推送到相应的数组中,否则只需使用该键和值创建一个新数组 ( 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:这段代码将填充结果 object 来自数组变量中相同键的分组值:

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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