javascript - 使用闭包进行多重选择的数组过滤器函数 - Javascript
问题描述
我需要为过滤器创建一个函数,它必须有 2 个选择。
inBetween(a, b)
a
- 这将返回和之间的数组b
inArray([...])
- 这将返回与过滤数组匹配的项目数组。
像这样的东西:
let arr = [1, 2, 3, 4, 5, 6, 7];
console.log( arr.filter(f(inBetween(3, 6))) ); // 3,4,5,6
console.log( arr.filter(f(inArray([1, 2, 10]))) ); // 1,2
我试过这个功能:
function f(item) {
let result = [];
function inBetween(from, to){
if (item >= from && item <= to){
result.push(item);
}
}
function inArray(array){
if (array.indexOf(item) >= 0){
result.push(item);
}
}
return result;
}
但我不知道如何将我的功能附加到filter
. 它给出了这个错误:
console.log(arr.filter(f(inBetween(3, 6)))); // 3,4,5,6
ReferenceError: inBetween 未定义
有可能吗?
解决方案
array.filter()
需要一个函数。如果要预先绑定一些参数,则需要一个返回函数的函数。在这种情况下,两者都inBetween
应该inArray
返回函数。
所以应该是:
let arr = [1, 2, 3, 4, 5, 6, 7];
function inBetween(min, max) {
return function(value) {
// When this is called by array.filter(), it can use min and max.
return min <= value && value <= max
}
}
function inArray(array) {
return function(value) {
// When this is called by array.filter(), it can use array.
return array.includes(value)
}
}
console.log( arr.filter(inBetween(3, 6)) )
console.log( arr.filter(inArray([1, 2, 10])) )
在这种情况下,min
、max
和array
close 覆盖返回的函数,以便在array.filter()
调用返回的函数时,它可以访问这些值。
您的inArray()
功能已经由 native 实现array.includes()
。
推荐阅读
- android - 我有一个更新,然后项目无法连接到 Web 服务。(它落在 catch 块上)
- gitlab - Gitlab从旧版本迁移到新版本
- amazon-web-services - Elastic Beanstalk 与 Classic Load Balancer 使用 HTTP 但不使用 HTTPS
- c# - 使用 LINQ.Dynamic 对数据进行排序
- spring - 从 Spring Cloud 配置服务器读取单个应用程序(客户端)的多个 .properties 文件
- angular - 使用@input 和@output 在角度组件之间传输数据
- c# - 如何直接上传文件到其他服务器
- ios - 表达式类型“@lvalue 字符串?” 没有更多上下文是模棱两可的
- node.js - ERR_HTTP_HEADERS_SENT ExpressJS
- android - 如何在 Flutter 中在 Android 上显示推送通知?