filter()方法的应用及底层原理的剖析

1.filter(fn,obj) 的使用方法

filter(fn,obj)方法可以对数组中的元素进行过滤,将满足条件的元素返回到一个新数组。

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
function fn(ele,index,self){
    if(ele > 5){
        return true;//当函数返回true时即表示该元素被过滤出来
    }else{
        return false;//函数执行结果返回false表示元素不会被过滤
    }
}
var newArr = arr.filter(fn,{});//第二个参数的传入可以改变函数fn this的指向;newArr用来储存被过滤出来的元素
console.log(newArr);//[6, 7, 8, 9]

注意事项:

1.数组中的filter(fn,obj)方法必须需要传一个参数且该参数必须是一个函数,否则就会报错。(即不能不传参数,且必须为函数)

2.第一个参数fn必须是一个函数,fn()中this默认指向window,如果Array.filter()传有第二个参数obj,则第一个参数的this将指向obj.
 

2.Array.filter()底层原理剖析

下面我们用原生JS方法来模仿Array.filter()的功能,从而了解filter的工作原理

Array.prototype.myfilter = function(fn,obj){
    var arr = [];//定义一个数组,来存放被过滤出来的元素
    var This = obj || window;//将This赋值为obj,如果obj没有传入,则This默认为window
    for(var i = 0;i<this.length;i++){
        if(fn.call(This,this[i],i,this)){//改变函数fn的this指向,并且判断函数fn执行的结果是否为true,如果为true则是我们需要过滤的元素。
            arr.push(this[i]);//将过滤出来的元素存放到arr数组中
        }
    }
    return arr;//将用于存放过滤元素的数组返回。
}

filter()和forEach()底层原理具有相似性,如果向进一步了解forEach()

可以参考forEach()方法的应用及底层原理的剖析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
filter()方法JavaScript中的一个数组方法,用于对数组中的元素进行过滤,并返回满足条件的元素组成的新数组。\[1\]该方法的语法为:Array.filter(function(currentValue, index, arr)),其中function是必需的,表示对每个元素执行的函数。currentValue表示当前遍历的元素值,index表示当前元素在原数组中的位置,arr表示原数组。\[3\] 在使用filter()方法时,我们可以传入一个函数作为参数,该函数会被应用于数组中的每个元素。如果函数返回true,则该元素会被保留在新数组中,如果函数返回false,则该元素会被过滤掉。\[2\] 例如,我们有一个数组arr = \[0, 1, 2, 3, 4, 5, 6, 7, 8, 9\],我们可以定义一个函数fn来过滤出大于5的元素: function fn(ele, index, self) { if (ele > 5) { return true; // 当函数返回true时表示该元素被过滤出来 } else { return false; // 函数返回false表示元素不会被过滤 } } 然后我们可以使用arr.filter(fn)来调用filter()方法,并将满足条件的元素存储在新数组newArr中: var newArr = arr.filter(fn); console.log(newArr); // \[6, 7, 8, 9\] 这样,我们就得到了一个新数组newArr,其中包含了原数组arr中大于5的元素。\[2\] #### 引用[.reference_title] - *1* *2* [filter()方法应用底层原理剖析](https://blog.csdn.net/weixin_53961451/article/details/123164687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [filter函数的使用方法](https://blog.csdn.net/qq_51130780/article/details/128940339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值