手寫(xiě)數(shù)組的 filter map reduce 方法

  1. 手動(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]

  1. 手動(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

github 地址 https://github.com/hegegetellstory1/blog-sharing

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容