• 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'));
  • 相关阅读:
    牛客小白月赛29 种树 题解(思维)
    E
    D
    方格取数(number) 题解(dp)
    csust T1097 “是时候表演真正的技术了” 题解(虚点跑最短路)
    poj 2352 Stars
    poj 3321 Apple Tree
    poj 3067 Japan
    poj 1195 Mobile phones
    poj 2155 Matrix
  • 原文地址:https://www.cnblogs.com/CyLee/p/9153824.html
Copyright © 2020-2023  润新知