对于这些对象的有效排序/嵌套算法有什么想法?

问题描述

我想找到一种有效且合乎逻辑的方法快速对大型对象列表进行排序: 输入是一大堆具有键值对的对象,每个对象都有一个“深度”键,分别是0、1、2或3。它描述了“深入嵌套”的意图。我要为这些对象的正确嵌套制作一个新列表,如下例所示:

输入:

[
    {
        "key": "valuea","depth": 0
    },{
        "key": "valueb","depth": 1
    },{
        "key": "valuec","depth": 2
    },{
        "key": "valued",{
        "key": "valuee",{
        "key": "valuef","depth": 1
    }
]

这是所需的输出

[
    {
        "key": "valuea","depth": 0,"tasks": [
            {
                "key": "valueb","depth": 1,"tasks": [
                    {
                        "key": "valuec","depth": 2
                    }
                ]
            }
        ]
    },"tasks": [
            {
                "key": "valuee","depth": 1
            },{
                "key": "valuef","depth": 1
            }
        ]
    }
]

本来我原本是想遍历每个值并将它们与之前的值进行比较,但是当我考虑到您连续遇到两个深度相同的情况(例如“ 0,1”)时,我陷入了困境,1.”这里值得一提的是顺序,因为深度嵌套在具有较低深度的先前对象中。

解决方法

function nestByDepth(milestones) {
    let result = [];
    let depths = [result];
    for (let task of milestones) {
        depths[task.depth].push(task);
        depths.splice(task.depth + 1); //should remove all elements at indices greater than task.depth
        task["tasks"] = [];
        depths.push(task.tasks);
    }
}