如何将数组传递给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;
}
答案 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]));