您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

js用闭包遍历树状数组的方法_javascript技巧

2026/1/3 4:19:55发布23次查看
做公司项目时,要求写一个方法,方法的参数为一个菜单数组集合和一个菜单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;
      break;
    }
    else {
       (function () {
        var m = arguments[0];
        var menuid = arguments[1];
        for (var j = 0; 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;
}
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product