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

时间:2015-07-23 21:10:22

标签: javascript sorting recursion typescript

我有一个对象的树结构(JavaScript / TypeScript),它们都是由同一个类(T)派生而来的。每个对象可能包含也可能不包含同一对象(List)的子对象。因此,这些孩子可能包含也可能不包含自己的孩子(List),等等......

我需要对这些"中的每一个进行排序"由对象的特定属性组成的节点。

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

                    nodes.sort((a, b) => {
                        return a.Id- b.Id;
                    });                       

                    nodes.forEach(function (node) {
                        node.children.sort((a, b) => {
                            return a.Id- b.Id;
                        });
                    });

但是,我需要一种方法来对孩子的所有孩子,孩子的孩子等进行分类。我想这会涉及递归,但我不确定处理这个问题的最佳方法在效率方面。

1 个答案:

答案 0 :(得分:1)

a)对节点进行排序。

b)浏览每个节点,如果节点有子节点,则重复步骤A及其子节点。

function sortNodesAndChildren(nodes) {
    nodes.sort();
    nodes.forEach(function (node) {
        if (nodeHasChildren(node)) {
            sortNodesAndChildren(node.children);
        }
    }
}