javascript - Sortera trädstruktur av objekt efter klassattribut
Jag har en trädstruktur av objekt (JavaScript/TypeScript), alla härledda från samma klass (T). Varje objekt kan ha eller inte ha barn av samma objekt (Lista). Därför kan dessa barn ha eller inte ha sina egna barn (Lista), och så vidare...
Jag behöver sortera varje av dessa "nivåer" av noder efter en specifik egenskap hos objektet.
För närvarande hanterar jag bara varje förälder och deras barn:
nodes.sort((a, b) => {
return a.Id- b.Id;
});
nodes.forEach(function (node) {
node.children.sort((a, b) => {
return a.Id- b.Id;
});
});
Jag behöver dock en metod som sorterar alla barn till barn, barn till de barnen och så vidare. Jag antar att detta kommer att innebära rekursion, men jag är inte säker på det bästa sättet att hantera detta när det gäller effektivitet.
Svar #1
a) Sortera noderna.
b) Gå igenom varje nod, om noden har barn, upprepa steg A med dess barn.
function sortNodesAndChildren(nodes) {
nodes.sort();
nodes.forEach(function (node) {
if (nodeHasChildren(node)) {
sortNodesAndChildren(node.children);
}
})
}
