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

oo7oh9g9  于 2023-02-28  发布在  Java
关注(0)|答案(4)|浏览(223)

我有一个对象数组,类似于:

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']}
]
xqkwcwgp

xqkwcwgp1#

你可以得到第一个对象array[0]Object.keys,你可以用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)
tf7tbtn2

tf7tbtn22#

这里,第一个循环将迭代所有键,第二个循环将迭代特定键的所有对象。

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

cx6n0qe33#

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来实现此结果。

olqngx59

olqngx594#

您可以获取条目,按键分组,然后从条目构建一个对象作为结果集。

const
    data = [{ prop1: 'teste1', prop2: 'value1', prop3: 'anotherValue1' }, { prop1: 'teste2', prop2: 'value2', prop3: 'anotherValue2' }, { prop1: 'teste3', prop2: 'value3', prop3: 'anotherValue3' }],
    result = Object
        .entries(data.reduce((r, o) => {
            Object.entries(o).forEach(([k, v]) => (r[k] ??= []).push(v));
            return r;
        }, {}))
        .map(p => Object.fromEntries([p]));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

相关问题