【问题标题】:JS- Traverse objectJS-遍历对象
【发布时间】:2017-11-15 16:43:52
【问题描述】:

我有一个具有嵌套对象作为属性的 javascript 对象。我想遍历这个 javascript 对象,以获取对象内每个对象的所有属性的列表。

我编写了一个函数来执行此操作,但由于某种原因,当我运行该函数时,我得到一个 0 的无限循环。有谁知道这个问题的原因和解决方法吗?

var test = {a: {b: { c: 'value '}}}; 

var traverse = function(object){
  for (var property in object) {
    if (object.hasOwnProperty(property)) {
        console.log(property); 
        traverse(object[property])
    }else {
      console.log('None'); 
      break;
    }
  }
}
traverse(test); 

【问题讨论】:

  • traverse("value") -> for (var property in object) { /*property === 0*/ if (object.hasOwnProperty("0") /* true */) { traverse("v") } -> traverse("v") -> for (var property in object) { /*property === 0*/ if (object.hasOwnProperty("0") /* true */) { traverse("v") } -> ...

标签: javascript object properties traversal


【解决方案1】:

最后有一个字符串,这个字符串被分隔成一个索引为零的单个字符。从此字符串中,获取位置为零的字符,并使用单个字符再次调用递归。

 key          value           comment
-----  -------------------  -----------
  a    {
           b: {
               c: "value "
           }
       }

  b    {
           c: "value "
       }

  c    "value "

  0    "v"
  0    "v"
  0    "v"                  and so on

此字符的索引为零,依此类推。

为了防止这种习惯,您可以检查只有真值(防止null)和要遍历的对象类型。

var test = { a: { b: { c: 'value ' } } };

var traverse = function (object) {
    for (var property in object) {
        if (object.hasOwnProperty(property)) {
            console.log(property);
            if (object[property] && typeof object[property] === 'object') {
                traverse(object[property]);
            }
        } else {
            console.log('None');
        }
    }
}
traverse(test);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2013-10-19
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多