Javascript 按类属性对对象的树结构排序
我有一个对象树结构(JavaScript/TypeScript),所有对象都派生自同一个类(T)。每个对象可能包含也可能不包含同一对象的子对象(列表)。因此,这些子项可能包含也可能不包含自己的子项(列表),等等 我需要根据对象的特定属性对每个节点的“级别”进行排序 目前,我只处理每位家长及其子女:Javascript 按类属性对对象的树结构排序,javascript,sorting,recursion,typescript,Javascript,Sorting,Recursion,Typescript,我有一个对象树结构(JavaScript/TypeScript),所有对象都派生自同一个类(T)。每个对象可能包含也可能不包含同一对象的子对象(列表)。因此,这些子项可能包含也可能不包含自己的子项(列表),等等 我需要根据对象的特定属性对每个节点的“级别”进行排序 目前,我只处理每位家长及其子女: nodes.sort((a, b) => { return a.Id- b.Id;
nodes.sort((a, b) => {
return a.Id- b.Id;
});
nodes.forEach(function (node) {
node.children.sort((a, b) => {
return a.Id- b.Id;
});
});
然而,我需要一种方法来对子节点的所有子节点、这些子节点的子节点进行排序,等等。我想这将涉及递归,但我不确定从效率角度来处理这个问题的最佳方法。a)对节点进行排序
b) 检查每个节点,如果节点有子节点,则对其子节点重复步骤A
function sortNodesAndChildren(nodes) {
nodes.sort();
nodes.forEach(function (node) {
if (nodeHasChildren(node)) {
sortNodesAndChildren(node.children);
}
}
}
这里没有效率。您需要对N个独立列表进行排序。那是O(N)。使用递归。@Amit O(N)表示您所说的每个列表@Fals我的意思是O(N),其中N是列表(“子对象”)的数量。排序本身没有显示,因此我不能假设使用的排序类型,但显然每个列表也必须进行排序。如果没有更有效的方法,那么我理解这一点的最大问题是语法。正如您已经知道的,这需要递归,您试过实现它吗?请告诉我们你的方法。