0

次の JSON があります。

{"data":[{"id":1,"client_id":1},{"id":2,"client_id":1}]}

しようとしていますfor...inが、何かがうまくいきません。

私のコードを見てください:

for (post in data) {
    console.log(post.client_id); //return undefined
}

しかし、私がこれを行うと:

for (i=0 ; i<data.length; i++) {
    console.log(data[i].client_id); //return the correct value
}

for..inこの場合、反復できないのはなぜですか?

4

5 に答える 5

2

「data」プロパティの値は配列です。必要なもの:

for (var i = 0; i < json.data.length; ++i)
  console.log(json.data[i].client_id);

これは、JSON が解析され、"json" という変数に格納されていることを前提としています。実際に「data」と呼ばれる場合は、「json.data」ではなく「data.data」になります。

for ... in実際の配列にループを使用するべきではありません。さまざまな理由から、それは悪い習慣です。数値インデックスまたは.forEach()新しいブラウザで利用できる機能のようなものを使用してください。

于 2012-08-09T22:02:01.797 に答える
1

まず、配列を で繰り返してはいけませんfor/in。その構造は、オブジェクトのプロパティを反復します。すべての配列要素を取得しますが、オブジェクトの他の反復可能なプロパティも取得する場合があります。

配列は、次のように常に従来のforループで反復する必要があります。

for (var i = 0; i < arr.length; i++).

次に、独自のデータ構造に適切に従っていることを確認する必要があります。あなたはこれを持っています:

var item = {"data":[{"id":1,"client_id":1},{"id":2,"client_id":1}]};

さらに広がると、次のようになります。

var item = {
    "data":[
        {"id":1,"client_id":1},
        {"id":2,"client_id":1}
     ]
};

したがって、JSON はオブジェクトです。そのオブジェクトには呼び出される 1 つのプロパティがdataあり、その 1 つのプロパティの値はオブジェクトを含む配列です。これを使用して、配列の最初の項目を取得します。

item.data[0]

または、このオブジェクトのプロパティ:

item.data[0].id
item.data[0].client_id

次のように、その配列内のすべての項目を反復します。

for (var i = 0; i < item.data.length; i++) {
    // access each object in the array
    item.data[i].id
    item.data[i].client_id
}
于 2012-08-09T22:08:31.407 に答える
0

次のようになります。

for (var post in data) {
      console.log(data[post].client_id); //return undefined
}

これは、for...inを使用して反復する正しい形式です。

于 2012-08-09T22:02:40.457 に答える
0
for (post in data) {
    console.log(post.client_id); //return undefined
}

あなたはこれを間違ってやっています、このようにそれを試してください:

for (post in data) {
    console.log(data[post].client_id); //return undefined
}

プロトタイプからのものが漏れる可能性があるため、実際にはフィルターも含める必要があります。

for (post in data) {
    if (data.hasOwnProperty(post)) {
        console.log(data[post].client_id); //return undefined
    }
}
于 2012-08-09T22:02:47.647 に答える
0

これは、JSONの構造が原因です。トップレベルのプロパティが1つしかない外部オブジェクトがあることに注意してくださいdata

{ "data":
    [
        {"id":1,"client_id":1},
        {"id":2,"client_id":1}
    ]
}

dataプロパティはありませんclient_id。反復しようとしているサブエントリの配列であり、それらにはclient_idプロパティがあります。これが、インデックスを作成するループが機能する理由dataです。

于 2012-08-09T22:03:33.953 に答える