J'essaie de manipuler cet exemple de gamme d'objets.
var data = [ { id: 'A', name: 'Test1', parentId: null, children:[ { id: 'B', name: 'Test2', parentId: 'A'}, { id: 'C', name: 'Test3', parentId: 'A'} ], }, { id: 'D', name: 'Test4', parentId: null, children:[ { id: 'E', name: 'Test5', parentId: 'D'}, { id: 'F', name: 'Test6', parentId: 'D'} ], }, ];
4 Réponses :
p> _. Groupby code>
est plus efficace dans ce scénarios. Vous devez regrouper les éléments par parentid code>, afin que vous puissiez facilement attribuer leurs enfants plus tard.
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Vous pouvez le faire en utilisant p> Réduire la méthode code> et créer une structure imbriquée pour n'importe quel niveau de profondeur.
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
L'utilisation de _. Groupby code> est la plus proche de vos besoins, il suffit de sélectionner
parentid code> comme indiqué précédemment. Si vous en avez besoin pour être récursif, vous pouvez essayer quelque chose comme ceci:
var data = [
{ id: 'A', name: 'Test1', parentId: null },
{ id: 'B', name: 'Test2', parentId: 'A'},
{ id: 'C', name: 'Test3', parentId: 'A'},
{ id: 'D', name: 'Test4', parentId: null },
{ id: 'E', name: 'Test5', parentId: 'B'},
{ id: 'F', name: 'Test6', parentId: 'D'},
];
function assignChildrens(grouped, parentId) {
if (!grouped[parentId]) return [];
return _.map(grouped[parentId], v => {
v.childrens = assignChildrens(grouped, v.id);
return v;
});
}
var finalData = assignChildrens(_.groupBy(data, 'parentId'), null);
Vous pouvez prendre une seule approche de boucle qui prend la relation entre les enfants et les parents et les parents et les enfants dans une table de hachage et ne réduit que les enfants des nœuds de la racine donnés.
p>
.as-console-wrapper { max-height: 100% !important; top: 0; }
Dupliqué possible de Cartographie de Lodash de collections imbriquées
Presque une dupe exacte, mais avec un js plain (pas de lodash): Construire l'arbre de hiérarchie de la liste plate avec le champ de parents? (cependant, tbh, il n'y a pas besoin de lodash du tout)