2011-08-04 12 views
3

のために、私は配列オブジェクトのためのJavaScript拡張機能を作成している中で繰り返します:javascript配列の拡張メソッドは、次のようにループ

Array.prototype.where = function (lamda) { 
var results = []; 

for (var i in this) { 
    if (lamda(this[i])) { 
      results.push(this[i]); 
     } 
    } 

    return results; 
} 

私のようなforループを使って配列を反復処理:

var myArray = [1,2,3,4]; 

for(var i in myArray){ 
    alert(myArray[i]); 
} 

...私の内線番号も列挙されています。

アイデア?

答えて

7

この動作は仕様です。
for/inループは、プロトタイプから継承したものを含め、オブジェクト内のすべてのプロパティを繰り返し処理します。

if (myArray.hasOwnProperty(i))をチェックすると、継承されたプロパティをスキップできます。

ただし、通常のforループを使用する必要があります。
Javascriptのfor/inループは配列をループするものではありません。

+0

ご回答いただきありがとうございます。私はまだjavascriptには新しく、C#のような拡張forループを使用するのに慣れています。私は定期的なforループを使用するために私のjavascriptを変更し、すべてがうまくいます。ありがとうございました。 – Jacob

3

これはjavascriptの通常の機能です。 for .. inループは、オブジェクトではなくオブジェクト上でループするため、オブジェクトのすべてのキーを取得します。

関連する問題