递归对一个数组对象里面的属性深层取值
代码如下(示例):
var data = [
{
name: "一级name",
meta: {
title:"121",
},
children: [
{
name: "二级name(yes)",
meta: {
KeepAlive: true
},
children: [
{
name: "三级name",
meta: {
title:"121",
},
children: [
{
name: "四级name",
meta: {
title:"121",
},
children:[
{
name:"五级name(yes)",
meta: {
title:"121",
KeepAlive: true
},
children:[
{
name:"六级name",
meta: {
title:"121",
},
}
]
}
]
}
],
},
],
},
],
},
{
name: "1级name(yes)",
meta: {
title:"121",
KeepAlive: true
},
children: [
{
name: "2级name",
meta: {
title:"121",
},
},
],
},
];
// 递归返回新数组
function getName(data){
let arr = []
function fn(data) {
data.map(it=>{
if(it.meta.KeepAlive == true)
arr.push(it.name) //将每次遍历的 name 存入数组中
if(it.children){ //递归结束条件 如果有 子页面 children 将该数据执行调用
fn(it.children)
}
})
}
fn(data)
return arr //返回遍历结果
}
let result = getName(data)
console.log(result);// 0: "二级name(yes)"1: "五级name(yes)"2: "1级name(yes)"
console.log(result.join(","));// 二级name(yes),五级name(yes),1级name(yes)
// 递归返回字符串(不建议)
// function getName(data){
// let str = ''
// function fn(data) {
// data.forEach(it=>{
// if(it.children){
// str += it.name+","
// fn(it.children)
// } else {
// str += it.name+","
// }
// })
// }
// fn(data)
// return str
// }
// let result = getName(data)
// console.log(result);
我是用在做翻页记忆时 用keep-alive进行缓存,递归希望拿到深层遍历的name的值, 先记录一下,可能有些不对的地方,以后发现了再修改。