【问题标题】:Javascript Arrange Array in Tree StructureJavascript以树状结构排列数组
【发布时间】:2014-04-30 06:46:48
【问题描述】:

我按照Model Tree Structure with An Array Of Ancestors 的教程创建了类别层次结构。当我进行查询时,我得到的结果与以下数组转储相同。

[
    {id:1,name:'A', ancestors:[]}

        ,{id:2,name:'AA',parent:1, ancestors:[1]}

            ,{id:4,name:'AAA',parent:2, ancestors:[1,2]}
            ,{id:5,name:'AAB',parent:2, ancestors:[1,2]}

        ,{id:3,name:'AB',parent:1, ancestors:[1]}

            ,{id:6,name:'ABA',parent:3, ancestors:[1,3]}
            ,{id:7,name:'ABB',parent:3, ancestors:[1,3]}

    ,{id:8,name:'B', ancestors:[]}
]

请帮我把上面的数组动态转换成如下:

[
    {id:1, name:'A', ancestors: [], children : [
        //children of A
        {id:2, name:'AA', parent:1, ancestors:[1], children:[
            //children of AA
            {id:4, name:'AAA', parent:2, ancestors:[1,2], children:[]}
            , {id:5, name:'AAB', parent:2, ancestors:[1,2], children:[]}

        ]}

        , {id:3, name:'AB', parent:1, ancestors:[1], children:[
            //children of AB
            {id:6, name:'ABA', parent:3, ancestors:[1,3], children:[]}
            , {id:7, name:'ABB', parent:3, ancestors:[1,3], children:[]}

        ]}

    ]}

    ,

    {id:8, name:'B', ancestors:[]}

]

到目前为止,我已经能够产生以下结果

[
    {id:1,name:'A', ancestors:[], children:[2,3]}

        ,{id:2,name:'AA',parent:1, ancestors:[1], children:[4,5]}

            ,{id:4,name:'AAA',parent:2, ancestors:[1,2], children:[]}
            ,{id:5,name:'AAB',parent:2, ancestors:[1,2], chldren:[]}

        ,{id:3,name:'AB',parent:1, ancestors:[1], children:[6,7]}

            ,{id:6,name:'ABA',parent:3, ancestors:[1,3], children:[]}
            ,{id:7,name:'ABB',parent:3, ancestors:[1,3], children:[]}

    ,{id:8,name:'B', ancestors:[], children:[]}
]

通过编写这段代码:

//var items = _GIVEN AT THE TOP_;

var indexedItem = items.map(function(item){
    return item.id;
});

items.forEach(function(item){
    if(!item.parent) {return;}

    var parent = items[indexedItem.indexOf(item.parent)];
    if(!parent.children){parent.children = [];}
    parent.children.push(item.id);
});

【问题讨论】:

  • 你为什么不选择我的答案并忽略它?

标签: javascript arrays tree hierarchy


【解决方案1】:

这是我使用递归的解决方案:

function findChildren(array, itemId){
    var newItems = []
    array.forEach(function(el,index){
        if(el.parent == itemId)
            {
                var itemsClone = JSON.parse(JSON.stringify(items));
                itemsClone.pop(index);
                el.children = findChildren(itemsClone, el.id);
                newItems.push(el);
            }


    });
    return newItems;
}


var tree = findChildren(items);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多