- 手動(dòng)實(shí)現(xiàn)Array.prototype.map
我們都知道m(xù)ap() 方法返回一個(gè)新數(shù)組,且數(shù)組里面的元素都調(diào)用一個(gè)提供的函數(shù) 然后 返回結(jié)果 函數(shù)的參數(shù)是 arr[i] i arr 所以我么就有了思路
// map 方法
function map(arr,callback) {
//首先檢查一下參數(shù)
let flag = !Array.isArray(arr) || !arr.length || typeof callback !=='function'
if(flag){
return []
}else{
//每次調(diào)用我們都會(huì)返回一個(gè)新數(shù)組
let newArr = []
for(let i = 0; i<arr.length;i++){
newArr[i] = callback(arr[i], i, arr)
}
return newArr
}
}
let allArr = [1,2,3,4,5]
console.log(map(allArr,(item)=>item+1))
[2, 3, 4, 5, 6]
- 手動(dòng)實(shí)現(xiàn) Array.prototype.filter
filter 方法也是我們返回一個(gè)新數(shù)組 但是返回的事符合既定條件的元素
那么我們這樣去寫(xiě)
// filter // 方法
function filter(arr,callback) {
let flag = !Array.isArray(arr) || !arr.length || typeof callback !=='function'
if(flag){
return []
}else{
let newArr = []
for (let index = 0; index < arr.length; index++) {
if(callback(arr[index],index,arr)){
newArr.push(arr[index])
}
}
return newArr
}
}
console.log(filter(allArr,(item)=>item>2))
[3, 4, 5]
3.手寫(xiě) Array.prototype.reduce
那么函數(shù)的reduce含義我們都知道 按順序執(zhí)行,最后結(jié)果匯總為一個(gè)值而返回 我們不要忘了它的一個(gè)初始值的處理
// reduce 方法
function reduce(arr,callback,initValue) {
let flag = !Array.isArray(arr) || !arr.length || typeof callback !=='function'
if(flag){
return []
}else{
// 判斷有沒(méi)有初始值
let isValue = initValue ===0?(!initValue):(!!initValue)
let reduceValue = isValue?initValue:arr[0]
// 判斷其實(shí)相加的值
for (let index =isValue?0:1; index < arr.length; index++) {
reduceValue = callback(reduceValue, arr[index],index, arr)
}
return reduceValue
}
}
console.log(reduce(allArr,(x,y)=>x+y)) //15