Je veux aplatir les éléments d'un tableau d'objets et recevoir un nouveau tableau de résultats. Comment puis-je y parvenir?
Cette approche n'a pas fonctionné:
const group = [{ idGroup: 1, member: [{ name: "Tim" }, { name: "Sina" }] }], }]; const result = [{ idGroup: 1, name: "Tim" }, { idGroup: 1, name: "Sina" }, ] const result = group.reduce((r, obj) => r.concat(obj.member), []); console.log(result)
5 Réponses :
Vous pouvez mapper des objets imbriqués.
const group = [{ idGroup:1, member: [{ name: "Tim" }, { name: "Sina" }] }]; result = group.flatMap(({ idGroup, member }) => member.map(({ name }) => ({ idGroup, name }))); console.log(result);
Ou utilisez la prochaine Array # flatMap
.
const group = [{ idGroup:1, member: [{ name: "Tim" }, { name: "Sina" }] }]; result = group.reduce( (r, { idGroup, member }) => [...r, ...member.map(({ name }) => ({ idGroup, name }))], [] ); console.log(result);
Vous pouvez utiliser flatMap ()
et utiliser map ()
sur le tableau d'objets membre
.
const group = [ { idGroup:1, member: [{name: "Tim"}, {name: "Sina"}], } ]; const res = group.flatMap(x => x.member.map(a => ({...a,idGroup:x.idGroup}))); console.log(res)
Vous devrez également utiliser map
(pour créer les nouveaux éléments):
const group = [{idGroup:1,member:[{name: "Tim"},{name: "Sina"}]}]; const result = group.reduce((acc, { idGroup, member }) => acc.concat(member.map(({ ...props }) => ({ ...props, idGroup }), [])), []); console.log(result);
Vous pouvez utiliser Array.prototype. réduire () et Array. prototype.forEach () comme ceci:
const group = [{ idGroup: 1, member: [{name: "Tim"}, {name: "Sina"}], }, { idGroup: 2, member: [{name: "Jo"}, {name: "Eric"}] }]; const result = group.reduce((acc, { idGroup, member }) => { member.forEach(({ name }) => acc.push({ idGroup, name })); return acc; }, []); console.log(result);
Une bonne vieille boucle peut également fonctionner.
const group = [{ idGroup: 1, member: [{ name: "Tim" }, { name: "Sina" }] }, { idGroup: 2, member: [{ name: "foo" }, { name: "bar" }, { name: "42" }] }]; let result = []; group.forEach((elem) => { elem.member.forEach((subElem) => { result.push({ idGroup: elem.idGroup, name: subElem.name }); }); }); console.log(result);
Je t'ai fait un extrait. Cela donne une erreur de syntaxe, veuillez corriger
Double possible de Réécrire le tableau en fonction du javascript du tableau enfant