javascript - (面试题)js遍历复杂对象并 输出属性名!!!
PHP中文网
PHP中文网 2017-04-11 13:20:59
[JavaScript讨论组]

昨天面试官问的题目,没答上来;

比如[{a:[{b:1,c:[{d:1},{e:1}]},{f:1},...]

就是一个数组,数组里面有多个对象,对象的值也是数组,数组里面还是对象,反复循环,现在要你输出这个数组里对象所有的属性名:

差不多就是一个树的结构。

要你编写函数方法来打印所有树及其节点上的属性名。

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
天蓬老师
function sayKeyName(obj){      
  function sayName(obj){
    if (!(obj instanceof Array) && !(obj instanceof Object)) {
       throw new TypeError('obj 类型错误!');
    }
    
    if (obj instanceof Array) {
      for (var i = 0; i < obj.length; ++i)
       {
          console.log('对象属性名:' , i);
          if (obj[i] instanceof Object) {
             sayName(obj[i]);
          }
       }
    } else {
       for (var key in obj) 
        {
          console.log('对象属性名:' , key);
          if (obj[key] instanceof Object) {
             sayName(obj[key]);
          }
        }
    }
  }
  
  sayName(obj);
}

var obj = [
   {a:
     [
       {
         b:1,
         c:[
             {d:1},
             {e:1}
           ]
        },
        {f:1}
      ]
    }
];
sayKeyName(obj);
F12查看结果...
大家讲道理
function printAttr(node) {
    if (node instanceof Array) {
      for (var i in node) {
        printAttr(node[i]);
      }
    }
    else if (node instanceof Object) {
      for (var p in node) {
        console.log(p);
        printAttr(node[p]);
      }
    }
}

已通过测试,谢谢。

PHP中文网

你们学校没开数据结构课程吗?这只是一个入门的树遍历问题啊...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号