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

來源:互聯網
上載者:User

做公司項目時,要求寫一個方法,方法的參數為一個菜單數組集合和一個菜單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;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.