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

fer*_*020 3 javascript iteration properties

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

例如,如果我有一个对象

{
  foo: 17,
  bar: {
    a: 2,
    b: 7
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Joh*_*ner 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);
Run Code Online (Sandbox Code Playgroud)

这会产生输出:

foo : 17 
a : 2 
b : 7 
Run Code Online (Sandbox Code Playgroud)

关于此功能的说明.它可以对任何对象进行处理.例如,如果对象中有一个数组,则会为数组中的每个项目获取单独的行.

所以对于以下对象:

var x = {
    foo: 17,
    bar: {
        a: 2,
        b: 7
    },
    foobar: [1,2,3]    
}
Run Code Online (Sandbox Code Playgroud)

输出将出现:

foo : 17 
a : 2 
b : 7 
0 : 1 
1 : 2 
2 : 3 
Run Code Online (Sandbox Code Playgroud)

显然有办法处理这个问题,但您需要定制功能以满足您的要求.