javascript - 在javascript中创建层次树

标签 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
            }
        }
    }

最佳答案

您可以采用迭代方法,使用一个对象来收集并同时为 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; }

关于javascript - 在javascript中创建层次树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53209328/

相关文章:

node.js - 使用 faye 通过 websockets 发送 javascript 对象

javascript - 如何将数组数组转换为从第一个数组获取键的对象数组?

javascript - POST 请求到本地运行的 node.js 脚本

javascript - 如何在 jQuery 中通过 "this"引用 JavaScript 类?

javascript - OXID 关闭类别中的 "More"以显示更多类别

javascript - 如何让 karma 将 webpack 的模式设置为开发模式?

javascript - 合并按日期排序的对象数组

javascript - native 对象和宿主对象有什么区别?

javascript - 使用Javascript区分JAVA是否被禁用或未安装

javascript - 延迟图像加载