复制代码 代码如下:
[{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;
}
