現在、JavaScriptでプロトタイプを使用して頭を上げようとしています。使用例は以下のようになりプロトタイプを使用するときにJavaScriptで列挙を停止する
Array.prototype.where=(function(){
var tmpArr=[],
success;
for (var x in this){
var success=true;
for (var i in arguments){
if (this[x][arguments[i][0]]!=arguments[i][1]){
success=false;
break;
}
}
if (success==true){
tmpArr.push(this[x]);
}
}
return tmpArr;
});
:
arrayName.where([0, 'Fred'], [1, 'Bloggs']);
については
はこれで実験する
は、私は、アレイ上にwhere句を置くことを可能として有効に働く機能を書いていますテストのために、これはかなりうまくいく。唯一の問題は、実行していた場合ですfor (var x in someArrayHere){
console.log(someArrayHere[x]);
}
出力は配列になりますが、プロトタイプ化した関数を表すレコードが出力されます。
私が解決できる限り、これは、関数を非列挙型として設定してソートされていますが、停止方法を説明する記事は見つかりません。
どうすればいいですか?それとも毎回以下のことをしなければならないでしょうか?
for (var x in someArray){
if (typeof tSch[x]!="object"){
}
}
さて、それは残念です= [ ありがとう! – Doug
問題ありません。これを回避するには、他のいくつかの答えで説明したように 'Object.hasOwnProperty'を使用することができます。私が言及しなかった理由はそれがかなり悪い習慣であるということです。おそらく、ネイティブオブジェクトで 'for ... in'を使うべきではありません! –
もう1つの可能な解決方法は、使用可能な場合はネイティブの 'Array.prototype.forEach'メソッドを使用し、そうでない場合はshimを使用することです。https://github.com/kriskowal/es5-shim/ –