萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> js用閉包遍歷樹狀數組的方法

js用閉包遍歷樹狀數組的方法

 這篇文章主要介紹了js中用閉包遍歷樹狀數組的方法,需要的朋友可以參考下

做公司項目時,要求寫一個方法,方法的參數為一個菜單數組集合和一個菜單id,菜單數組的格式為樹狀json,如下面所示: 代碼如下:[{"id":28,"text":"公司信息","children":[        {"id":1,"text":"公司文化"},        {"id":2,"text":"招聘計劃"},        {"id":6,"text":"公司新聞","children":[             {"id":47,"text":"行業新聞"}]},             {"id":11,"text":"內部新聞","children":[                            {"id":24,"text":"行政信息"},                            {"id":27,"text":"高層指示"}]},             {"id":22,"text":"聯系我們"},             {"id":26,"text":"產品展示","children":[                            {"id":32,"text":"電力產品"},                            {"id":33,"text":"配件介紹"}}]    }] }]     現在給出的菜單id為32,要求找到對應的項,並返回對應的菜單名稱,方法是先循環遍歷數組,當項的id等於指定的id時,將菜單名稱取出,如果不等於則看當前項是否有children,如果children不為空且數量大於0,則遍歷children,這時就要用到javascript的閉包,將遍歷children的方法放在一個匿名方法中,這樣一直在匿名方法中遞歸自身,當遇到相同名稱的id,就跳出循環,然後從主方法中返回得到的菜單名稱,代碼如下:   代碼如下:function getMenuName(menus, id) {   var name = "" ;   for (var i = 0; i < menus.length; i++) {     if (menus[i].id == id) {       name = menus[i].text;       break;     }     else {        (function () {         var m = arguments[0];         var menuid = arguments[1];         for (var j = 0; j < m.length; j++) {           if (m[j].id == menuid) {             name = m[j].text;             break;           }           else if m[j].children != null && m[j].children.length > 0) {             arguments.callee(m[j].children, val);//遞歸匿名方法           }         }       })(menus[i].children, id);     }   }   return name; }  
copyright © 萬盛學電腦網 all rights reserved