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

cda*_*lto 7 javascript sorting recursion typescript

我有一个对象的树结构(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;
                        });
                    });
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*ant 6

a) 对节点进行排序。

b) 遍历每个节点,如果该节点有子节点,则对其子节点重复步骤 A。

function sortNodesAndChildren(nodes) {
    nodes.sort();
    nodes.forEach(function (node) {
        if (nodeHasChildren(node)) {
            sortNodesAndChildren(node.children);
        }
    })
}
Run Code Online (Sandbox Code Playgroud)