2013-08-07 3 views
6
私は奇妙なことを経験した

が、これは私が実際に使用しているコードです:あなたが期待したようループの配列は 'remove'と読みますか?

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

、ログはそれぞれの行の数を与える必要があります(0、1、2 ...)私の配列が唯一の誰もが今までにこれを3行

をencountredでしたことを知って

0 
1 
2 
remove 

:代わりに、それは私にこれを提供しますか?

+4

リストを作成するコードを表示します。 –

+1

私は、アレイ用in'のために 'を使用していないrecommandと思います(参照http://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-such-a-bad-idea ) –

+0

私は読むことをお勧めします[ 'に関するMDNドキュメントを用... in'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) 。それは問題が何であるかを伝えます。 –

答えて

9

基本的には、問題は、アレイを通じてiteratungのために意図されていないfor inループを、使用して、配列を反復処理しているということです。その目的は、オブジェクトのすべてのプロパティを反復することであり、配列にはremoveというプロパティがあるようです。

なぜfor inが配列に関して悪い考えであるかの詳細については、Why is using "for...in" with array iteration a bad idea?を参照してください。

は解決策として、私は、インデックス付きforループを使用することをお勧めしたいです。このタイプのループはプロパティを気にしないので、あなたは大丈夫です。だから、基本的にダウン非常に古典に来る:

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

ところで:それはコンストラクタ関数でない限りあなたは、JavaScriptで何かを大文字べきではありません。したがって、である必要があります。

PS:それは配列と(誤って)それらを使用して良い読書、Fun with JavaScript Arrays、かなり良い読み取りを読んでください。

+0

非常に有用な答え、ありがとう! ); – Mehdiway

+0

それが助けたこと、オフに行くために正しい答えとして答えをマークするために残りの時間を待っていた –

+0

:-)答えとして、この答えをマークするために素晴らしいことです – Mehdiway

6

はい、それはJavaScriptでどのようにfor..in作品です。すべてオブジェクトプロパティ(配列インデックスではありません)を列挙します。簡単な解決策:配列の上にfor..inを使用しないでください。なぜならそれはそれが目的ではないからです。

関連する問題