首页 > 解决方案 > 如何从 JavaScript 对象创建树状结构

问题描述

这是我得到的对象示例:

输入 :

{“人物”:[{“id”:“12”,“parentId”:“0”,“text”:“Man”,“level”:“1”,“children”:null},{“id” :“6”,“parentId”:“12”,“text”:“男孩”,“level”:“2”,“children”:null },{“id”:“7”,“parentId”:“ 12”,“文本”:“其他”,“级别”:“2”,“孩子”:null },{“id”:“9”,“parentId”:“0”,“text”:“女人”,“level”:“1”,“children”:null },{“id”:“11”,“parentId”:“ 9”,“文本”:“女孩”,“级别”:“2”,“孩子”:空 } ] }女孩”,“级别”:“2”,“孩子”:null } ] }女孩”,“级别”:“2”,“孩子”:null } ] }

我想把它转换成这样的 JSON 格式:

{
    "People": [
        {
            "id": "12",
            "parentId": "0",
            "text": "Man",
            "level": "1",
            "children": [
                {
                    "id": "6",
                    "parentId": "12",
                    "text": "Boy",
                    "level": "2",
                    "children": null
                },
                {
                    "id": "7",
                    "parentId": "12",
                    "text": "Other",
                    "level": "2",
                    "children": null
                }   
            ]
        }
}

任何想法/帮助将不胜感激

标签: javascriptjsonobject

解决方案


您可以使用一个对象来引用子级或父级,并收集子级和父级以仅获取根的人。

var data = { John: "James", Samar: "Michel", Albert: "Michel", Michel: "James", James: "Sarah" },
    parents = new Set,
    children = new Set,
    references = {},
    result;

Object
    .entries(data)
    .forEach(([child, parent]) => {
        references[child] = references[child] || [];
        references[parent] = references[parent] || [];
        references[parent].push({ [child]: references[child] });
        parents.add(parent);
        children.add(child);
    });

result = [...parents]
    .filter(p => !children.has(p))
    .map(p => ({ [p]: references[p] }));

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


推荐阅读