将数组传递给filter方法

时间:2015-08-31 18:49:51

标签: javascript arrays

如何将数组传递给JavaScript中的过滤器方法?

例如,我想用另一个数组过滤数组。 现在我有我的代码工作,但我没有传递数组,我的过滤器数组有一个全局范围。有没有办法传递数组以获得更清晰的代码?

var array = [1, 2, 3, 4, 5];
var filterNumbers = [1, 4];

var result = array.filter(filterData);

function filterData(value) {
  return filterNumbers.indexOf(value) === -1;
}

5 个答案:

答案 0 :(得分:3)

您可以使用部分申请(fiddle)执行此操作:

function filterUsing(filterByArray) { // get the array to filter by
    return function(value) { // return a filtering function
        return filterByArray.indexOf(value) === -1;
    };
}

var filterFunc = filterUsing(filterNumbers); // get the function using your filterNumbers array

var result = array.filter(filterFunc);

答案 1 :(得分:1)

您可以使用匿名函数:

var array = [1, 2, 3, 4, 5];
var filterNumbers = [1, 4];
var result = array.filter(function(value) {
    return filterNumbers.indexOf(value) === -1;
});

答案 2 :(得分:1)

您可以创建一个函数来返回用于过滤数组的回调。这样就可以打破filterNumbers和过滤函数本身之间的依赖关系。

请参阅:

var array = [1, 2, 3, 4, 5];
var filterNumbers = [1, 4];

var result = array.filter(myFilter(filterNumbers));

function myFilter(mynumbers){ 
  return function filterData(value) {
    return mynumbers.indexOf(value) === -1;
  }
}

document.getElementById("test").innerHTML = JSON.stringify(result);
<div id="test"></div>

我希望它有所帮助。快乐的编码!

答案 3 :(得分:0)

简答:NO。

filter方法需要一个回调函数作为参数。 资料来源:https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filtro

同样没有意义的是,javascript会通过传递一个数组来弄清楚你想要做什么。为了使代码更清晰,您可以传递一个匿名函数:

var array = [1, 2, 3, 4, 5];
var filterNumbers = [1, 4];

var result = array.filter(function() {
 return filterNumbers.indexOf(value) === -1;
});

答案 4 :(得分:0)

我认为最好的选择是返回过滤功能的函数:

function filterFN(numbers) {
  return function(value) { return number.indexOf(value) === -1; };
}

var array = [1, 2, 3, 4, 5];
var result = array.filter(filterFN([1,4]));