如何在JavaScript中将列表排列成树?

时间:2018-07-25 13:17:47

标签: javascript

我有一个列表:

var list = ['parent-element', 'child-of-previus-element-1', 'child-of-previus-element-2'];

其中数组中的每个下一个元素都是前一个的子元素。

我想将此列表转换为树形结构,例如:

{
    "parent-element": {
        "childrens": [{
            "child-of-previus-element-1": {
                "childrens": [{
                    "child-of-previus-element-2": {
                        "childrens": []
                    }
                }]
            }
        }]
    }
}

我尝试过:

var list = ['parent-element', 'child-of-previus-element-1', 'child-of-previus-element-2'];
var tree = {};

for (var i = 0; i < list.length; i++) {
    if( list[i-1] &&  tree[list[i-1]] ){
      tree[list[i-1]].childrens[list[i]] = {"childrens": []}; 
    } else {
      tree[list[i]] = {
        "childrens": []
      };
    }
}

console.log( JSON.stringify(tree) );

但输出为:

{
    "parent-element":{
        "childrens":[]
     },
     "child-of-previus-element-2":{
        "childrens":[]
     }
}

1 个答案:

答案 0 :(得分:3)

您可以适当减少它:

var list = ['parent-element', 'child-of-previus-element-1', 'child-of-previus-element-2'];

var tree = list.reduceRight((child, key) => ({ [key]: { children: [child] } }), null);

console.log(JSON.stringify(tree))