请各位大神帮帮我,不太了解js的算法

解决方案 »

  1.   

    一个方法 
     循环--> 查询 -->  拼接 。。
      

  2.   

    可是当我查询到之后怎么把那段数据添加到父级的chilren里
      

  3.   

    function domenu(a){
    var menu=[]
    for(var i in a)
    if(a[i].parentId==null){
    a[i].submenu=[];
    menu.push(a[i]);
    }
    for(var i in menu)
    for(var j in a)
    if(menu[i].id==a[j].parentId){
    a[j].submenu=[];
    menu[i].submenu.push(a[j]);
    }
    for(var i in menu)
    for(var j in menu[i].submenu)
    for(var k in a )
    if(menu[i].submenu[j].id==a[k].parentId){
    menu[i].submenu[j].submenu.push(a[k]);
    }
    /*第二种实现方法循环少,但复杂*/
    var firstIndex=-1;
    for(var i in a){
    if(a[i].parentId==null){
    firstIndex++
    a[i].submenu=[];
    menu.push(a[i]);
    }
    else continue
    var secondIndex=-1;
    for(var j in a){
    if(menu[firstIndex].id==a[j].parentId){
    secondIndex++
    a[j].submenu=[];
    menu[firstIndex].submenu.push(a[j]);
    }
    else continue;
    for(var k in a )
    if(menu[firstIndex].submenu[secondIndex].id==a[k].parentId)
    menu[firstIndex].submenu[secondIndex].submenu.push(a[k]);
    }
    }
    }
    给你两种方法看看,以前后台这样给我数据是也这样,是3层菜单的,多层就算了
      

  4.   


    var arrayOld = [{ "id": 1, "name": "111", "children": [] },
        { "id": 2, "name": "222", "parentid": 1, "children": [] },
        { "id": 3, "name": "333", "parentid": 2, "children": [] },
        { "id": 4, "name": "444", "children": [] }];
    var arrayNew = [];
    var arrayNew1 = [];
    function contractTree(arrayOld, model) {
        var modelNew = [];
        $.each(arrayOld, function (i, v) {
            if (v.parentid && v.parentid == model.id) {
                model.children.push(v);
            }
        });
        if (model.children.length > 0) {
            $.each(model.children, function (i, v) {
                modelNew.push(contractTree(arrayOld, v));
            })
        }
        return model;
    }
    $.each(arrayOld, function (i, v) {
        if (!v.parentid) {
            arrayNew.push(v);
        };
    });
    $.each(arrayNew, function (i, v) {
        arrayNew1.push(contractTree(arrayOld, v));
    }); 大概就是这么个东西 有点粗糙将就着看
      

  5.   

    var arrayOld = [{ "id": 1, "name": "111", "children": [] },
        { "id": 2, "name": "222", "parentid": 1, "children": [] },
        { "id": 3, "name": "333", "parentid": 2, "children": [] },
        { "id": 4, "name": "444", "children": [] }];
    var arrayNew = [];
    function contractTree(arrayOld, model) {
        $.each(arrayOld, function (i, v) {
            if (v.parentid && v.parentid == model.id) {
                model.children.push(v);
            }
        });
        if (model.children.length > 0) {
            $.each(model.children, function (i, v) {
                contractTree(arrayOld, v);
            })
        }
        return model;
    }
    $.each(arrayOld, function (i, v) {
        if (!v.parentid) {
            arrayNew.push(v);
        };
    });
    $.each(arrayNew, function (i, v) {
        contractTree(arrayOld, v);
    });
      后面这个 前面那个有点问题