js将多个并列数据解析成嵌套json格式

xia_tong 2017-09-25 10:20:58



请各位大神帮帮我,不太了解js的算法
...全文
482 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
打老虎zz 2017-10-10
  • 打赏
  • 举报
回复
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);
});
后面这个 前面那个有点问题
打老虎zz 2017-10-10
  • 打赏
  • 举报
回复

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));
});

大概就是这么个东西 有点粗糙将就着看
qq_38415720 2017-10-10
  • 打赏
  • 举报
回复
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层菜单的,多层就算了
xia_tong 2017-09-25
  • 打赏
  • 举报
回复
可是当我查询到之后怎么把那段数据添加到父级的chilren里
apple8160 2017-09-25
  • 打赏
  • 举报
回复
一个方法 循环--> 查询 --> 拼接 。。

87,916

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧