在javascript

时间:2018-11-08 14:03:20

标签: javascript javascript-objects

我有一个像这样的平面数组,其中包含具有ID和值的数据对象。每个ID都是唯一的

var data = [{
        id: 1,
        value: 'as',
        parent: 2
    }, {
        id: 2,
        value: 'sasa',
        parent: 3
    }, {
        id: 3,
        value: 'sasa',
        parent: 
    }]

如何在JavaScript中创建类似于“对象”的分层树而不是数组,因为我还想访问对象的元素(如3.2.value)

{
        id: 3,
        value: 'sasa',
        parent: '',
        2: {
            id: 2,
            value: 'sasa',
            parent: 3,
            1: {
                id: 1,
                value: 'as',
                parent: 2
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

您可以采用迭代方法,使用一个对象同时为idparent创建一个对象,以保持它们之间的关系。

最后返回以父节点为根的属性。

结果略有不同,因为您要使用节点的id作为访问者来寻址这些节点。

var data = [{ id: 1, value: 'as', parent: 2 }, { id: 2, value: 'sasa', parent: 3 }, { id: 3, value: 'sasa', parent: '' }],
    tree = function (data, root) {
        return data.reduce(function (r, o) {
            Object.assign(r[o.id] = r[o.id] || {}, o);
            r[o.parent] = r[o.parent] || {};
            r[o.parent][o.id] = r[o.id];
            return r;
        }, Object.create(null))[root];
    }(data, '');

console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }