zoukankan      html  css  js  c++  java
  • js 根据title从下级往上级查找

    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'));
  • 相关阅读:
    学习hadoop
    贵在坚持
    保护好自己的毕业论文
    博客园与CSDN的选择
    Matlab中的“prod”函数
    js实现HashMap()
    js常用正则表达式
    苹果手机使用替代onkeyup的方法
    keydown
    ArrayAndString(数组和字符串)
  • 原文地址:https://www.cnblogs.com/CyLee/p/9153824.html
Copyright © 2011-2022 走看看