树形递归实例代码,js用闭包遍历树状数组的办法

做公司项目时,要求写三个形式,方法的参数为多少个美食做法数组集结和贰个美食指南id,菜单数组的格式为树状json,如下边所示:

复制代码 代码如下:

复制代码 代码如下:

var l=json.length;
var arr = [];
for(var i = 0; i < l; i++){
(function(){
var jsonArray =arguments[0];
for(var k in jsonArray){
if(k.indexOf(‘children’) != -1 && jsonArray[k] != null){
arguments.callee(jsonArray[k]);
}
else{
if(k == ‘name’ || k == ‘children’){
arr.push(jsonArray[k]+”);
}
}
}
})(json[i]);
}

[{“id”:28,”text”:”公司新闻”,”children”:[

JSON如下所示:

     {“id”:1,”text”:”公司文化”},

复制代码 代码如下:

     {“id”:2,”text”:”招聘布署”},

[{“id”:”001″,”name”:”东京市浦东新区”,”children”:{“id”:”002″,”name”:”巴黎市徐汇区”}}]

     {“id”:6,”text”:”公司音讯”,”children”:[

您或许感兴趣的文章:

  • JS中的二叉树遍历详解
  • JavaScript数据结构和算法之二叉树详解
  • js达成权力树的翻新权限制时间的全选全消功用
  • javascript先序遍历DOM树的法子
  • 详解JavaScript树结构
  • JavaScript数据结构与算法之集结(Set)
  • javascript 数据结构的题
  • Javascript数据结构与算法之列表详解
  • JavaScript兑现的链表数据结构实例
  • JavaScript数据结商谈算法之图和图算法
  • JavaScript数据结构与算法之栈详解
  • JS二叉树的归纳实现形式言传身教

          {“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;
}

你只怕感兴趣的篇章:

  • JavaScript贯彻树的遍历算法示例【广度优先与深度优先】
  • JS中的二叉树遍历详解
  • javascript先序遍历DOM树的主意
  • JavaScript完结二叉树的先序、中序及后序遍历方法详解
  • JS达成二叉查找树的树立以及部分遍历方法达成
  • javascript贯彻二叉树遍历的代码
  • JavaScript数据结构之二叉树的遍历算法示例
  • JS遍历DOM文书档案树的主意实例详解
  • JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
  • JavaScript落实的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
  • JavaScript树的深度优先遍历和广度优先遍历算法示例

相关文章