4

なぜこれが機能しないのか誰かが説明できますか?

オブジェクト内に2つのオブジェクトがあります。forループを使用して、ネストされたオブジェクト内の各プロパティを次々に出力します。

var people = {
    john: {
        name: "John",
        age: 20
    },
    bob: {
        name: "Bob",
        age: 40
    }
};

for (var person in people) {
    for (var property in person) { 
        console.log(property);
    }
}

私はそれが印刷されることを期待しています:

name
age
name
age

代わりに私は得る:

0
1
2
3
0
1
2

1)私は何が間違っていますか?

2)上記の数値を出力するためにコンソールは正確に何をしていますか?

4

3 に答える 3

9

これは、2番目の(ネストされた)ループで、オブジェクトのプロパティ名(値ではない!)を保持する文字列値のfor変数を繰り返すためです。次のように変更する必要があります: personpeoplepeople[person]

for (var property in people[person]) { 
    console.log(property);
}

上記の数値は、文字列値の文字のインデックスに対応しています。

0: j    0: b
1: o    1: o
2: h    2: b
3: n
于 2013-02-28T21:31:51.790 に答える
2

を実行するfor..inと、値ではなくキーを反復処理します。

for (var person in people)personは文字列です。各キー:、、"john"および"bob"

2番目のループでは、その文字列のすべてのプロパティを反復処理して、文字列の「インデックス」を出力します(配列などの文字列にアクセスできますstring[1])。

ループする前に、オブジェクトの値を取得する必要があります。

for (var person in people) {
    var thisPerson = people[person];
    for (var property in thisPerson) { 
        console.log(property);
    }
}
于 2013-02-28T21:34:14.317 に答える
0

ビジョンが上記のようにプロパティを印刷するには、以下を使用して実際の値を取得します

inの目的であるインデックスだけでなく、値を指定する必要があります。あなたは次のようなことをする必要があります

for (var person in people) {
    for (var property in people[person]) { 
        console.log(people[person][property]);
    }
}
于 2013-02-28T21:32:19.240 に答える