J'ai un tableau multidimensionnel d'objets -
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}]
}
]
Je dois le convertir en ce tableau -
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
}
]
La solution que j'ai actuellement est la suivante
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;
}, []);
Existe-t-il un moyen plus efficace et plus élégant de procéder ? J'essaie d'y parvenir en réduisant le nombre de fois où j'itère sur chaque tableau, en réduisant le code et en améliorant la lisibilité. Comme vous pouvez le voir, les some et find pendant chaque itération augmentent le nombre d'itérations. Y a-t-il un moyen de le réduire ?