(面试题)js遍历复杂对象并 输出属性名!!!

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

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

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

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

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

阅读 8.6k
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]);
      }
    }
}

已通过测试,谢谢。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题