有没有一种好方法来迭代Javascript对象的所有子属性?

时间:2013-01-25 16:17:21

标签: javascript properties iteration

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

例如,如果我有一个对象

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

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

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

2 个答案:

答案 0 :(得分:7)

您可以使用这样的递归函数:

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 

显然有办法解决这个问题,但您需要定制功能以满足您的要求。

答案 1 :(得分:0)

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

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?

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