2016-11-15 8 views
0
arr.filter(filterCallback(this, newValue)); 

function filterCallback(this, newValue){ 
    return this !== newValue; 
} 

上記のコードは機能しません。何が問題なのかはわかりません。私は関数を分割しようとする前に、これは動作しています。スプリットフィルターコールバック関数の出力

arr.filter(function(val){ 
    return val !== newValue; 
}); 
+0

正確に何をしたいですか? –

+0

'filterCallback'を' .filter() 'コールバックとして呼び出そうとしていますか? 'filterCallback(this、newValue)'のパラメータとして 'this'の目的は何ですか? – guest271314

+0

@SharathBangeraは内部関数をフィルターにしません。 –

答えて

0

あなたはパラメータでfilterCallbackを呼び出すためにFunction.prototype.bind()を使用して、値を比較する.filter()callbackの現在の要素を受け取ることができます。最初のパラメータは、これは動作します.bind()

var arr = [1,2,3]; 
 

 
var not = {n:3}; 
 

 
var res = arr.filter(filterCallback.bind(not)); 
 

 
function filterCallback(el){ 
 
    return this.n !== el; 
 
} 
 

 
console.log(res); // [1, 2]

+0

は文字列にできませんか? –

+0

@JessJordan https://jsfiddle.net/9ptmbus2/ – guest271314

0

に渡されたとして、あなたはまた、filterCallback()コールのthisを設定することができます -

arr.filter(filterCallback); 

function filterCallback(){ 
    return newValue; 
} 

チェックスニペット

var ages = [32, 33, 16, 40]; 
 

 
function checkAdult(age) { 
 
    return age >= 18; 
 
} 
 

 
function myFunction() { 
 
    document.getElementById("demo").innerHTML = ages.filter(checkAdult); 
 
}
<p>Click the button to get every element in the array that has a value of 18 or more.</p> 
 

 
<button onclick="myFunction()">Try it</button> 
 

 
<p id="demo"></p>