Trait de soulignement pour aplatir tableau imbriqué de parent/enfant objets
J'ai un tableau d'objets, où chaque objet a un "enfants" de la propriété (les données de l'exemple ci-dessous). Je veux aplatir parents/enfants dans un seul tableau, avec chaque parent, immédiatement suivi par les enfants.
J'ai écrit ce qui suit à l'aide de lo-dash /trait de soulignement, et il fonctionne lorsque je avoir un et un seul enfant pour chaque parent:
_.flatten(_.zip(myArr, _.flatten(myArr, "children")))
Je sais que je peux utiliser quelque chose comme _.chaque et de construire un objet, je me demandais si il y a un super moyen de faire cela à l'aide de _.
De Données, Par Exemple:
[{
name: "Some Name",
value: 1234,
children: [{
name: "Another name",
value: 3456
}, {
name: "A third name",
value: 9876
}]
}, {
name: "Omg Lazer Guns",
value: 3333,
children: [{
name: "PewPewPew",
value: 4444
}]
}];
Je suppose que vous vouliez dire
lodash.com/docs#flatten - la version courte utilise
pluck
au lieu de flatten
à l'intérieur du zip?lodash.com/docs#flatten - la version courte utilise
pluck
, oui
OriginalL'auteur Scott Silvi | 2013-08-01
Vous devez vous connecter pour publier un commentaire.
Simples et plus lisibles à la façon de le faire est
Le résultat est
Il ne retourne les enfants.
OriginalL'auteur zsong
L'approche habituelle de fusionner les tableaux de la façon que vous voulez est de
zip
et Vous pouvez les utiliserplumer
pour extraire les enfants. Quelque chose comme ceci:Qui vous laissera avec
undefined
entrées dansmangled
si l'un des éléments de niveau supérieur demyArr
n'ont paschildren
touches à tout. Vous pouvez jeter dans uncompact
de se débarrasser de ces:Démo: http://jsfiddle.net/ambiguous/aeS86/
Bien sûr, faire de la déformation d'un couple
for
boucles et certainscommande
appels sera probablement plus rapide, mais la différence de vitesse ne compte pas avec les tableaux court.Je serais probablement aller avec quelque chose comme la vôtre. Dans la vraie vie, je serais probablement utiliser
for
boucles etpush
pour aplatir et de la nettoyer en un seul passage. Le problème (OMI), c'est que nous n'avons pas de réel itérateurs donc, il y a une tonne de copie et de constructeur array qui se passe.Je pouvais aller et venir sur la réponse "correcte" - je suppose que c'est un peu subjectif. Depuis votre commentaire vous a dit que vous l'auriez fait sa, j'ai marqué comme réponse. De Plus, vous avez 30x réputation 🙂
Pas de soucis, sza la solution est très bien (un de ceux qui upvotes est la mienne d'ailleurs).
OriginalL'auteur mu is too short