var menuData = [{
name: 'manage',
title: '测试1',
icon: 'home',
}, {
title: '测试2',
name: 'car-parent',
icon: 'android-car',
children: [{
name: 'car',
icon: 'android-car',
title: '测试2-1'
}]
}, {
title: '测试3',
name: 'house-parent',
icon: 'social-designernews',
children: [{
icon: 'social-designernews',
name: 'house-second',
title: '测试3-1',
children: [{
icon: 'social-designernews',
name: 'house',
title: '测试3-1-1'
},{
icon:'test',
name:'test',
title:'测试3-1-2'
}]
}]
}, {
title: '测试2',
name: 'car-parent',
icon: 'android-car',
children: [{
name: 'car',
icon: 'android-car',
title: '测试2-1'
}]
}];
function recursion (menuData, name) {
// 最终要返回的数组
var arrTitle = []
// 遍历数组
for (var i = 0; i < menuData.length; i++) {
// 每一次遍历最外层都需要清空
arrTitle = []
// 一个对象
var obj = menuData[i]
// hack
try {
// 一个递归
(function (obj) {
// 如果是数组则遍历
if ( Object.prototype.toString.call(obj) === '[object Array]' ) {
// 遍历数组
for (var i = 0; i < obj.length; i++) {
arguments.callee(obj[i])
}
// 如果是对象则进行判断
} else if ( Object.prototype.toString.call(obj) === '[object Object]' ) {
// 如果找到了,直接返回数组吧
if (obj.name == name) {
// 我都服了我自己了
throw new Error('hack')
// 如果存在 children 属性
} else if (obj.children) {
// 二话不说先记录
arrTitle.push(obj.title);
// 递归
arguments.callee(obj.children);
}
}
})(obj);
} catch (err) {
return arrTitle
}
}
return []
}
console.log(recursion(menuData, 'house'));
console.log(recursion(menuData, 'car'));
console.log(recursion(menuData, 'abc'));