-1

これは確かに奇妙な出来事です。まず、Chrome バージョン 23.x を使用していますが、他のブラウザーでこれを再現しようとはしていません。

サーバーから次の形式の JSON 配列を受け取ります。

JSON

{
"layout":0,
"caption":"Work History",
"cols":[
   {"field":"company","label":"Company Name","hidden":false,"order":-1,"validationType":2,"list":[]},       {"field":"date_start","label":"From","hidden":false,"order":-1,"validationType":1,"list":[]},
   {"field":"date_end","label":"Until","hidden":false,"order":-1,"validationType":0,"list":[]},
   {"field":"position","label":"Title","hidden":false,"order":-1,"validationType":2,"list":[]},
   {"field":"description","label":"Description","hidden":false,"order":-1,"validationType":0,"list":[]},
   {"field":"project","label":"Project","hidden":false,"order":-1,"validationType":64,"list":[]}
   ]
}

次に、JavaScript を使用して cols オブジェクトをループしようとします」

Javascript

for (var c in json.cols) {
    console.log("col name: " + c);
}

Google Chrome のコンソールには次のように表示されます。

出力

col name: 0
col name: 1
col name: 2
col name: 3
col name: 4
col name: 5
col name: remove

まず、出力は 6 つだけにする必要があります。第二に、この最後の「削除」キーはどこから来るのでしょうか? なぜ記載されているのですか?

4

2 に答える 2

3

あなたは実際にはオブジェクトではなく配列であるため、ループobj.json.colsで反復処理する必要があります。for(;;)私はあなたがこのようなものを探していると信じています:

for (var i=0; i<json.cols.length; i++) {
    console.log("col name: " + json.cols[i].label);
}

さらに、ループの場合はプロパティが表示されないArray.prototypeため、Web ページに何らかのスクリプトが干渉しているようです。for..inremove

于 2013-01-10T18:24:59.853 に答える
3

コードをfor...inループif( json.cols.hasOwnProperty(c) ) { ... }内にラップするために使用します。

mdnから取得:

プロトタイプではなく、オブジェクト自体に関連付けられたプロパティのみを考慮したい場合は、getOwnPropertyNamesを使用するか、 hasOwnPropertyチェックを実行します ( propertyIsEnumerableも使用できます)。

for...in ループは、オブジェクトのプロパティを任意の順序で反復します

JavaScript:

for (var c in json.cols) {
    if( json.cols.hasOwnProperty(c) ) {
      console.log("col name: " + c);
    }
}

于 2013-01-10T18:25:07.590 に答える