请各位大神帮帮我,不太了解js的算法
解决方案 »
- google map的infowindow怎么对应多个maker
- 急求一个例子JS代码 投票或满意的javascript代码
- 可否类似vbs中on error resume next一样处理
- 火急火燎的问题(父子页面传值)..全部分都给上了!!!
- 100分送上,关于弹出菜单问题!
- 在asp.net里把数据库里的一个字段的数据读到一个数组里后,怎样把它的值赋给页面里js脚本里定义的数组?????
- javascript面向对象,二叉树排序。
- 高分求救!急!急!急!关于JavaScript的问题?
- 关于在线real播放器的代码修改,请指点。谢谢
- js数组的sort方法原理
- (100分)node.js难道不能模拟一个事件堵塞,另一个事件非堵塞吗?
- 【已崩溃T T】Jquery 跳转传值问题
循环--> 查询 --> 拼接 。。
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);
});
后面这个 前面那个有点问题