首頁 >web前端 >js教程 >js用閉包遍歷樹狀數組的方法_javascript技巧

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

WBOY
WBOY原創
2016-05-16 16:55:101339瀏覽

做公司專案時,要求寫一個方法,方法的參數為一個選單數組集合和一個選單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     if (menus[i].id == id) {
      name = menus[i].text;
     (function () {
        var m = arguments[0];
        var menuid = arguments[1];
       if (m[j ].id == menuid) {
            name = m[j].text;
              else if m[j].children != null && m[j].children .length > 0) {
            arguments.callee(m[j].children, val);//遞歸匿名方法
       })(menus[i].children, id );
    }
  }
  return name;
}

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn