美文网首页
手写数组的 filter map reduce 方法

手写数组的 filter map reduce 方法

作者: hegege | 来源:发表于2020-07-28 11:55 被阅读0次
    1. 手动实现Array.prototype.map
      我们都知道map() 方法返回一个新数组,且数组里面的元素都调用一个提供的函数 然后 返回结果 函数的参数是 arr[i] i arr 所以我么就有了思路
    
    // map 方法 
    function map(arr,callback) {
     //首先检查一下参数
     let flag = !Array.isArray(arr) || !arr.length || typeof callback !=='function'
     if(flag){
       return  []
     }else{
       //每次调用我们都会返回一个新数组
       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. 手动实现 Array.prototype.filter
      filter 方法也是我们返回一个新数组 但是返回的事符合既定条件的元素
      那么我们这样去写
    // 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.手写 Array.prototype.reduce
    那么函数的reduce含义我们都知道 按顺序执行,最后结果汇总为一个值而返回 我们不要忘了它的一个初始值的处理

    // reduce 方法
    
    function reduce(arr,callback,initValue) {
      let flag = !Array.isArray(arr) || !arr.length || typeof callback !=='function'
       if(flag){
         return []
       }else{
        //  判断有没有初始值
        let isValue = initValue ===0?(!initValue):(!!initValue)
        let reduceValue = isValue?initValue:arr[0]
    //  判断其实相加的值
        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

    相关文章

      网友评论

          本文标题:手写数组的 filter map reduce 方法

          本文链接:https://www.haomeiwen.com/subject/swtfrktx.html