javascript multi-level menu help me!!!!
-
var nodes = [
{ idloai: 1, tenloai: 'The Thao', loaicha: 0 },
{ idloai: 2, tenloai: 'Giai Tri', loaicha: 0 },
{ idloai: 3, tenloai: 'Giao Duc', loaicha: 0 },
{ idloai: 4, tenloai: 'Dai Hoc', loaicha: 3 },
{ idloai: 5, tenloai: 'Du Hoc', loaicha: 3 },
{ idloai: 6, tenloai: 'Bong Da', loaicha: 1 },
{ idloai: 7, tenloai: 'Tennis', loaicha: 1 },
{ idloai: 8, tenloai: 'Boi Loi', loaicha: 1 },
{ idloai: 9, tenloai: 'Nhac Trong Nuoc', loaicha: 2 },
{ idloai: 10, tenloai: 'Nhac Quoc Te', loaicha: 2 },
{ idloai: 11, tenloai: 'MV Hay', loaicha: 2 },
{ idloai: 12, tenloai: 'nodejs', loaicha: 0 }
];function getMenu(f,c){
var a=[];
for(i=0; i<f.length; i++){
if(f[i].loaicha===c){
a.push({
id:f[i].idloai,
name:f[i].tenloai,
sub:getMenu(f,i)
});
}
}
return a;
}console.log(getMenu(nodes, 0));
error : Maximum call stack size exceeded
-
cái sub:getMenu(f,i) của bạn sẽ chạy hoài với trường hợp i = 0 đấy bạn nên xem lại chỗ này
-
@Trần-Duy chỗ i thay bằng id
-
function getMenu(data, id_find) { return (function(arr) { for (var i = 0; i < data.length; i++) { (function(item) { if (!item || item.loaicha != id_find || !item.idloai || !item.tenloai) return; item = (function(json) { var sub = getMenu(data, json.id); if (sub.length > 0) json.sub = sub; return json; })({ id: item.idloai, name: item.tenloai }); return arr.push(item); })(data[i]); } return arr; })([]) }
[ { "id": 1, "name": "The Thao", "sub": [ { "id": 6, "name": "Bong Da" }, { "id": 7, "name": "Tennis" }, { "id": 8, "name": "Boi Loi" } ] }, { "id": 2, "name": "Giai Tri", "sub": [ { "id": 9, "name": "Nhac Trong Nuoc" }, { "id": 10, "name": "Nhac Quoc Te" }, { "id": 11, "name": "MV Hay" } ] }, { "id": 3, "name": "Giao Duc", "sub": [ { "id": 4, "name": "Dai Hoc" }, { "id": 5, "name": "Du Hoc" } ] }, { "id": 12, "name": "nodejs" } ]
-
This post is deleted!