6

如何将变量传递给 javascript 中的过滤器函数?

在这种情况下,我试图将一个值传递给变量“maxage”:

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

    dates.filter(dateFilter,500);

如何将值传递500给过滤器maxage

4

3 回答 3

13

您需要调用Function.prototype.bind来创建类似于默认参数的内容。

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

dateFilter然后回调将调用加500号“自动传入值value, index, array

function dateFilter( customArgument, value, index, array ) {
    // customArgument === 500
}
于 2012-12-07T01:51:04.390 回答
10

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 文档显示filter签名为array.filter(callback[, thisObject])

于 2012-12-07T01:51:26.887 回答
3

也许没有必要把事情复杂化,尝试简单的方法:

var maxage = 500,
    newDates = dates.filter(function(value) {
        return Date.now() - value < maxage;
    });
于 2012-12-07T01:51:18.743 回答