-2
次のプログラムは、最初の引数から削除するプログラムです。常に配列であり、要素は連続した引数と等しくなります。次のコードを実行すると、最初の引数に等しい値だけが入力配列(最初の引数)から削除されますが、残りは元のままです。配列の終わりの.filter関数内のforループはどうですか?
function destroyer(arr) {
// Remove all the values
var i;
var arr = Array.prototype.slice.call(arguments);
var arr_req = arr[0];
arr_req = arr_req.filter(function(val) {
for(i = 1; i < arr.length; i++) {
if(val === arr[i]) {
return false;
} else {
return true;
}
}
});
return arr_req;
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));
しかし、正しい結果が最初のケースでは得られない理由を私はループの内側に次のコードを使用する場合、私は正しい期待される出力を取得し、それは、そう[1,1]
arr_req = arr_req.filter(function(val) {
for(i = 1; i < arr.length; i++) {
if(val === arr[i]) {
return false;
}
}
return true;
});
です?後者と同じではない?私はJavaScriptが初めてです。誰でも説明できますか?
最初のケースでは、 'for'ループは一度だけ実行されます。そこの 'return'ステートメントはループを壊します。 – Cerbrus