У меня есть этот многомерный массив объектов -
const initialArray = [
{
name: 'aaa',
value:[{id:1, data:1}, {id:2, data:2}, {id:3, data:3}]
},
{
name: 'bbb',
value:[{id:1, data:4}, {id:2, data:5}, {id:3, data:6}]
},
{
name: 'ccc',
value:[{id:1, data:7}, {id:2, data:8}, {id:3, data:7}]
},
{
name: 'ddd',
value:[{id:1, data:2}, {id:2, data:1}, {id:3, data:1}]
}
]
Мне нужно преобразовать его в этот массив -
const finalArray = [
{
id: 1, aaa: 1, bbb: 4, ccc: 7, ddd: 2
},
{
id: 2, aaa: 2, bbb: 5, ccc: 8, ddd: 1
},
{
id: 3, aaa: 3, bbb: 6, ccc: 7, ddd: 1
}
]
Решение, которое у меня есть сейчас, -
initialArray.reduce((accum, arrayData) => {
arrayData.value.forEach(element => {
if (accum.some(el => el.id === element.id)) {
accum.find(el => el.id === element.id)[arrayData.name] = element.data;
} else {
accum.push({ id: element.id, [arrayData.name]: element.data });
}
});
return accum;
}, []);
Есть ли лучший и более элегантный способ сделать это?Я пытаюсь сделать это, уменьшив количество итераций в каждом массиве, уменьшив код и читабельность.Как вы можете видеть, некоторые и находят во время каждой итерации увеличивает количество итераций.Есть ли способ уменьшить его?