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层菜单的,多层就算了
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)); }); 大概就是这么个东西 有点粗糙将就着看
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); }); 后面这个 前面那个有点问题
循环--> 查询 --> 拼接 。。
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层菜单的,多层就算了
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));
}); 大概就是这么个东西 有点粗糙将就着看
{ "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);
});
后面这个 前面那个有点问题