1.filter
1.1作用
- 用于對數(shù)組進行過濾
- 會創(chuàng)建一個新數(shù)組旨涝,且新數(shù)組中的元素是通過檢測指定數(shù)組中符合條件的所有元素
- 不會對空數(shù)組進行檢測
- 不會改變原數(shù)組
1.2語法
Array.filter(function(element, indedx, arr), thisValue)
- element:數(shù)組中當前正在處理的元素
- index[可選]:正在處理的元素在數(shù)組中的索引
- arr[可選]:調(diào)用了filter的數(shù)組本身
- thisValue[可選]: 執(zhí)行callback時春贸,用于this的值
1.3實例
let nums = [1,44,2,5,3,34,65]
let newNums = nums.filter(item => {
return item > 10
})
console.log(newNums) //[44,34,65]
2.實現(xiàn)filter
let nums = [1,44,2,5,3,34,65]
// console.log(newNums) //[44,34,65]
Array.prototype.myFilter = function (callback,thisValue) {
if(this == undefined) { //null和undefined不能調(diào)用該方法
throw new TypeError("this is null or not undefined!")
}
if(Object.prototype.toString.call(callback) != "[object Function]") { //判斷傳給callback的實參是否是函數(shù)材泄,不是函數(shù)則報錯
throw new TypeError(callback + "is not a function!")
}
let res = [] //因為該方法不能改變原數(shù)組
//所以要新建一個數(shù)組來接收符合要求的數(shù)值
for(let i = 0;i < this.length;i++) { //誰調(diào)用了該函數(shù)this就指向誰一個數(shù)組調(diào)用了該函數(shù)所以this.length相對于arr.length
let right = callback.call(thisValue,this[i],i,this) //callback的this指向傳來的thisValue薄坏,并且傳參后面三個
right && res.push(this[i]) //相與的特點:左邊結果是true才會執(zhí)行右邊,false則跳過。這句的意思就是當right為true時(即符合用戶在callback函數(shù)中所寫的要求)再執(zhí)行push操作
}
return res
}
let newNums = nums.myFilter(item => {
return item > 10
})
console.log(newNums) //[44, 34, 65]