递归对一个数组对象里面的属性 返回新数组 ---keep-alive中使用

递归对一个数组对象里面的属性深层取值

代码如下(示例):

   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的值, 先记录一下,可能有些不对的地方,以后发现了再修改。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值