js 内置函数filter()能传参数进去吗?

比如外部有一个变量 string, 如何传到filter函数中,进行过滤

var arr = ["abc", "abcd", "abcde"];
var string = "abc";
arr.filter(function(item, index, array){
    return item == string;
})

返回数组中值为"abc"的项

阅读 8.6k
5 个回答

也许你是想要外部传入变量到一个内部逻辑,那么可以试试约定一个位置来存放这个变量,然后filter里跳过这个位置:

var arr = [{str: "abc"}, "a", "b", "abc"];
arr.filter(function(item, index, array) {
 if (index == 0) return false;
 var str = array[0]["str"];
 return item == str;
}); // "abc"

filter 接受两个参数,一个是回调函数一个是this

函数作用域肯定是能访问全局作用域的变量的,传入filter函数想做什么?

https://developer.mozilla.org...

这是数组的方法,不是字符串的方法
句法

var newArray = arr .filter(callback [,thisArg ])//这里虽然有个参数,但是也是一个数组,可以在使用时,指定所传入的是哪个数组
参数
callback
函数是一个谓词,用于测试数组的每个元素。返回true保留元素,false否则采用三个参数:
element
正在数组中处理的当前元素。
index
在数组中正在处理的当前元素的索引。
array
数组 filter 被调用。
thisArg Optional
可选的。this执行时使用的值callback。
返回值
具有通过测试的元素的新数组 //注意 连返回值都是一个数组

也就是说他的结构是这样的。
1.先得有个数组arr
2.arr.filter(参数1:回调函数(可以是forEach,普通函数,等等只要有返回值返回一个判断条件,让fliter去做筛选,因为这本身就是过滤器,过滤器得有过滤条件,就是通过这个回调函数返回的),参数2:数组(可有可无))
例子

var words = ["spray", "limit", "elite", "exuberant", "destruction", "present"];

var longWords = words.filter(function(word,words ){
  return word.length > 6;
});//因为这一个本身就要有返回新数组的,所以要用变量接住。
console.log(longWords);

总结:从头到尾,没有字符串的事。

1.filter内可以直接使用外部参数

var arr = ["abc", "abcd", "abcde"];
var string = "abc";
arr.filter((item)=>{
    return item == string;
})

2.绑定作用域this为string

var arr = ["abc", "abcd", "abcde"];
var string = "abc";
arr.filter(function(item, index, array){
    return item == this;
},string)
新手上路,请多包涵

filter可以传入闭包

var arr = ["abc", "abcd", "abcde"];
arr.filter(function(string){
    return (item) => {
        return item == string
    }
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题