【问题标题】:Is there a good way to iterate over all the subproperties of a Javascript object?有没有一种好方法可以遍历 Javascript 对象的所有子属性?
【发布时间】:2013-01-09 15:41:35
【问题描述】:

鉴于我有一个 javascript 对象,有没有办法遍历所有原始子属性?

例如,如果我有一个对象

{
  foo: 17,
  bar: {
    a: 2,
    b: 7
  }
}

我想迭代 foo、bar.a 和 bar.b。

请记住,我更喜欢迭代 Object.keys() 而不是使用 for/in 循环,尽管我确信我可以将任何 for/in 循环响应转换为 Object.keys() 迭代。

【问题讨论】:

  • 你试过了吗?
  • 你要找的是Object Reflection
  • 我可以使用一个函数来递归检查所有对象的属性并返回一组原始属性,但我想知道是否有标准或内置的方法。
  • @Joe 这是一个概念,还是一个实际功能?请给我一个代码示例吗?
  • JavaScript 中没有对对象属性递归枚举的内置支持。

标签: javascript properties iteration


【解决方案1】:

更新:您可以这样做(取自以下链接之一):

for (var key in validation_messages) {
   var obj = validation_messages[key];
   for (var prop in obj) {
      alert(prop + " = " + obj[prop]);
   }
}

这是一个可能的重复:

Iterate through object properties

How to Loop through plain JavaScript object with objects as members?

您可以在以上帖子中找到答案。

【讨论】:

  • 链接到其他 SO 问题而不增加价值是评论,而不是答案。
  • 这些问题是关于迭代属性的;我希望递归地遍历属性和子属性。
  • 我也想覆盖任意深度,所以我想要原始属性,加上非原始属性的原始子属性,加上非原始子属性的原始子属性属性等
  • 您可以添加一个检查,并根据使用typeof element === 'object';检查元素是否为对象进行递归调用。
【解决方案2】:

你可以像这样使用递归函数:

var x = {
    foo: 17,
    bar: {
        a: 2,
        b: 7
    }
}

function parseObject(something) {
    var keys = Object.keys(something);
    for (var i = 0; i < keys.length; i++) {
        if (typeof something[keys[i]] === 'object') parseObject(something[keys[i]])
        else console.log(keys[i] + " : " + something[keys[i]]);
    }
}
parseObject(x);

生成输出:

foo : 17 
a : 2 
b : 7 

关于此功能的说明。它递归在任何对象上。例如,如果对象中有一个数组,那么数组中的每个项目都会有单独的行。

所以对于以下对象:

var x = {
    foo: 17,
    bar: {
        a: 2,
        b: 7
    },
    foobar: [1,2,3]    
}

会出现输出:

foo : 17 
a : 2 
b : 7 
0 : 1 
1 : 2 
2 : 3 

显然有很多方法可以解决这个问题,但您需要调整函数以满足您的要求。

【讨论】:

  • 好的,谢谢,我知道这肯定会满足我的需要。我想检查是否有内置函数或更标准的方法来执行此操作,但除此之外,这就是我会使用的。
猜你喜欢
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 2015-01-07
相关资源
最近更新 更多