我有一个对象数组,像这样:
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']}
]
你可以获得第一个对象
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)
在这里,第一个循环将遍历所有键,第二个循环将遍历特定键的所有对象。
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)
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 来实现结果。