3

JavaScript オブジェクトがある場合、すべてのプリミティブ サブプロパティを反復処理する方法はありますか?

たとえば、オブジェクトがある場合

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

foo、bar.a、および bar.b を反復処理したいと思います。

for/in ループを使用するよりも Object.keys() を反復処理することを好むことに注意してください。ただし、for/in ループ応答を Object.keys() 反復処理に変換できると確信しています。

4

2 に答える 2

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 

これを処理する方法は明らかにありますが、要件を満たすように関数を調整する必要があります。

于 2013-01-25T16:34:55.403 に答える
0

更新:これはあなたがそれを行う方法です(以下のリンクの1つから取得):

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

これは次の重複の可能性があります:

オブジェクト プロパティを反復処理する

オブジェクトをメンバーとしてプレーンな JavaScript オブジェクトをループする方法は?

上記の投稿で答えを見つけることができます。

于 2013-01-25T16:25:20.597 に答える