2015-07-22 50 views
0

我想通過將另一個數組傳遞給過濾器函數來過濾數組的值。在javascript中傳遞一個比較數組來過濾函數

x = [1,2,3]; 
y = [2,3]; 

var n = x.filter(filterByArray); 

function filterByArray(element, index, array, myOtherArray){ 
    // some other code 
}); 

在函數中將「y」傳遞給「myOtherArray」原型的最佳方法是什麼?

+1

預期輸出是什麼?\ – sinhayash

+0

我試過.bind(),但它不適用於我。輸出並不重要,比如我想過濾出重複的元素,這只是一個例子。我已經找到了不使用.filter()的方法,但我寧願使用.filter()函數。 –

回答

1

您可以使用第二個參數.filter(callback[, thisArg])將其值this的值設置爲「有用」的值,例如您的第二個數組

function filterByArray(element, index, array) { 
    return this.lookup.indexOf(element) > -1; // this.lookup == y 
}; 

var x = [1,2,3], 
    y = [2,3]; 

var result = x.filter(filterByArray, {lookup: y}); 
console.log(result); 

fiddle

1

不能更改回調的簽名,但你可以有一個單獨的類,它的另一個數組作爲參數:

function MyFilter(otherArray) { 
    this.otherArray = otherArray; 
} 

MyFilter.prototype.filterByArray = function(element, index, array) { 
    // you can use this.otherArray here 
}; 

然後:

x = [1,2,3]; 
y = [2,3]; 

var myFilter = new MyFilter(y); 
var n = x.filter(myFilter.filterByArray); 
+0

不是真的有用,是嗎?不要傳遞方法。 – Bergi