6

私はちょうど奇妙なことを経験しました.これは私が実際に使用しているコードです:

for (iter in data.List) {
    console.log(iter);
}

ご想像のとおり、ログには各行の番号 (0、1、2...) が表示されるはずですが、代わりに次のように表示されます。

0
1
2
remove

私の配列には3行しかないことを知っている

誰もこれに遭遇したことがありますか?

4

2 に答える 2

9

基本的に、問題は、for inループを使用して配列を反復処理していることです。これは、配列を反復処理するためのものではありません。その意図は、オブジェクトのすべてのプロパティを反復処理することであり、明らかにremove配列で呼び出されるプロパティがあります。

for in配列に関してなぜ悪い考えなのかについての詳細は、配列反復で "for...in" を使用するのはなぜ悪い考えなのかを参照してください。.

解決策として、インデックス付きforループを使用することをお勧めします。このタイプのループはプロパティを気にしないため、問題ありません。したがって、基本的には非常に古典的なものになります。

for (var i = 0; i < data.List; i++) {
  console.log(data.List[i]);
}

ところで、JavaScript では、コンストラクター関数でない限り、大文字を使用しないでください。したがって、それはあるべきですdata.list

PS: 配列とそれらの (誤) 使用に関しては、読みやすい読み物です。Fun with JavaScript Arraysを読んでください。非常に読みやすいです。

于 2013-08-07T12:18:59.240 に答える
6

はい、それがfor..inJavaScript での動作です。すべてのオブジェクトプロパティ (配列インデックスではない) を列挙します。簡単な解決策:for..in配列では使用しないでください。それは目的ではないためです。

于 2013-08-07T12:18:49.400 に答える