2012-12-07 45 views
3

如何將一個變量傳遞給JavaScript中的過濾器函數?將值傳遞給javascript數組過濾器?

在這種情況下,我試圖將值傳遞給變量「最大生存週期」:

var dateFilter = function(value,maxage) { // Age in miliseconds 
    if(Date.now() - value < maxage) { 
     return value; 
     } else { 
     return false; 
     } 
    } 

    dates.filter(dateFilter,500); 

我怎麼能傳遞價值500到過濾器maxage

+0

我試圖通過500到過濾器作爲變量最大生存週期 – lisovaccaro

回答

11

您需要調用Function.prototype.bind來創建類似的默認參數。然後

dates.filter(dateFilter.bind(null, 500)); 

dateFilter回調將與500 PLUS 「自動價值觀通過」 value, index, array調用。

function dateFilter(customArgument, value, index, array) { 
    // customArgument === 500 
} 
+1

你擁有它轉身。綁定的參數是第一個,其他的是在之後傳遞的。像這樣:'function dateFilter(customArgument,value,index,array){' –

+0

@IHateLazy:nope。 – jAndy

+0

http://jsfiddle.net/4AFFU/是的。 –

2

也許沒有必要過於複雜的事情,嘗試簡單的方法:

var maxage = 500, 
    newDates = dates.filter(function(value) { 
     return Date.now() - value < maxage; 
    }); 
9

maxage已經綁定this。考慮以下幾點:

var dateFilter = function(value) { 
    if(value < this) return value; 
} 
var dates = [1,2,3]; 
console.log(dates.filter(dateFilter,2)); 
> [1] // Output. 

MDN documentation顯示filter簽名是array.filter(callback[, thisObject])

+1

+1您的回答是,並且是正確的。 –

+0

我不是DV,但是......哎呀,它真的有用!從我+1。 – VisioN