2017-01-19 1 views
0

フィルタメソッドで引数を使用することができません。混乱する部分は、私がconsole.log(arguments [1])を取得したときです。また、2をフィルタとして使用すると動作します。しかし、私が引数を使うとすぐに、それをフィルタリングしません。ポイントで ケース:フィルタメソッドでjavascript引数を使用するにはどうすればよいですか?

function destroyer(arr) { 
// Remove all the values 

var newArray = a.filter(function(val){ 
return val != arguments[1]; ///////////will NOT work////////////// 
}); 
return newArray; 

} 

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); 

ただし、次のような作品:

function destroyer(arr) { 
// Remove all the values 

var newArray = a.filter(function(val){ 
return val != 2; ///////////will work////////////// 
}); 
return newArray; 

} 

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); 
+0

引数[1]は、フィルタメソッド –

答えて

0

アクセスしようとしているargumentsdestroyerからではなくarray.filterのコールバック関数からのものではありません。その引数に名前を付けるか、一時的にarguments[1]を変数に格納し、代わりにその変数を使用する必要があります。

function destroyer(arr) { 
    var arg1 = arguments[1]; 

    return a.filter(function(val){ 
    return val != arg1; 
    }); 

} 

// or 

function destroyer(arr, arg1) { 

    return a.filter(function(val){ 
    return val != arg1; 
    }); 

} 
+1

で渡す関数から取られます。別のオプションは、矢印関数を使用することです。しかし、パラメータを使用すると、とにかくIMOがきれいになります。 –

+0

@FelixKlingそれがあります。しかし、その後、OPのコードを検討する...:D – Joseph

0

フィルタ関数の内部では、引数はそのフィルタ関数に渡される引数です。

したがって、destroyer引数を別の変数に格納して使用する必要があります。

// Remove all the values 
function destroyer(arr) { 

var args = arguments; 
var newArray = arr.filter(function(val){ 

return val != args[1]; 
}); 
return newArray; 

} 

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); 
関連する問題