Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按类属性对对象的树结构排序_Javascript_Sorting_Recursion_Typescript - Fatal编程技术网

Javascript 按类属性对对象的树结构排序

Javascript 按类属性对对象的树结构排序,javascript,sorting,recursion,typescript,Javascript,Sorting,Recursion,Typescript,我有一个对象树结构(JavaScript/TypeScript),所有对象都派生自同一个类(T)。每个对象可能包含也可能不包含同一对象的子对象(列表)。因此,这些子项可能包含也可能不包含自己的子项(列表),等等 我需要根据对象的特定属性对每个节点的“级别”进行排序 目前,我只处理每位家长及其子女: nodes.sort((a, b) => { return a.Id- b.Id;

我有一个对象树结构(JavaScript/TypeScript),所有对象都派生自同一个类(T)。每个对象可能包含也可能不包含同一对象的子对象(列表)。因此,这些子项可能包含也可能不包含自己的子项(列表),等等

我需要根据对象的特定属性对每个节点的“级别”进行排序

目前,我只处理每位家长及其子女:

                    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是列表(“子对象”)的数量。排序本身没有显示,因此我不能假设使用的排序类型,但显然每个列表也必须进行排序。如果没有更有效的方法,那么我理解这一点的最大问题是语法。正如您已经知道的,这需要递归,您试过实现它吗?请告诉我们你的方法。