将对象数组转换为具有合并值的对象数组

问题描述 投票:0回答:3

我有一个对象数组,像这样:

 array = [
{prop1: 'teste1', prop2: 'value1', prop3: 'anotherValue1' },
{prop1: 'teste2', prop2: 'value2', prop3: 'anotherValue2' },
{prop1: 'teste3', prop2: 'value3', prop3: 'anotherValue3' }

]

我想把它转换成这样的新数组:

[
   {prop1:['teste1', 'teste2', 'teste3']},
   {prop2:['value1', 'value2', 'value3']},
   {prop3:['anotherValue1', 'anotherValue2', 'anotherValue3']}
]
javascript
3个回答
0
投票

你可以获得第一个对象

Object.keys
array[0]
。您可以使用
map
使用连续的键创建新对象,并使用
reduce
方法使用扩展运算符合并数组中的先前值和当前值。

const array = [
  { prop1: 'teste1', prop2: 'value1', prop3: 'anotherValue1' },
  { prop1: 'teste2', prop2: 'value2', prop3: 'anotherValue2' },
  { prop1: 'teste3', prop2: 'value3', prop3: 'anotherValue3' }
];

 const arrayTransformed = Object.keys(array[0]).map(key => ({
    [key]: array.map(obj => obj[key])
 }));

console.log(arrayTransformed)


0
投票

在这里,第一个循环将遍历所有键,第二个循环将遍历特定键的所有对象。

const array1 = [
    {prop1: 'teste1', prop2: 'value1', prop3: 'anotherValue1' },
    {prop1: 'teste2', prop2: 'value2', prop3: 'anotherValue2' },
    {prop1: 'teste3', prop2: 'value3', prop3: 'anotherValue3' }
]

let array2 = {}
Object.keys(array1[0]).forEach(function(data){
    array2[data] = []
    array1.forEach(obj => array2[data].push(obj[data]))
})

console.log(array2)


0
投票

const array = [{
  prop1: 'teste1',
  prop2: 'value1',
  prop3: 'anotherValue1'
}, {
  prop1: 'teste2',
  prop2: 'value2',
  prop3: 'anotherValue2'
}, {
  prop1: 'teste3',
  prop2: 'value3',
  prop3: 'anotherValue3'
}];

const result = Object.values(array.reduce((acc, obj) => {
  Object.entries(obj).forEach(([key, value]) => {
    acc[key] = acc[key] || {
      [key]: []
    };
    acc[key][key].push(value);
  });
  return acc;
}, {}));

console.log(result);

你可以使用 reduce 来实现结果。

© www.soinside.com 2019 - 2024. All rights reserved.