手写实现reduce、map

reduce的参数为((pre,cur,index,array)=>{},base)

//reduce 方法  
    //函数 初始值
    Array.prototype.myreduce=function (fn,base){
        let myarr=this
        //数组副本
        let temparr=this.concat()
        //如果存在默认值需要把默认值推入数组第一位
        if(base) temparr.unshift(base)

        //记录下标和两者和 
        let index 
        let newvalue

        while(temparr.length>1){
            index=myarr.length-temparr.length+1
            newvalue=fn.call(null,temparr[0],temparr[1],index,myarr)
            //去掉两项,并且把二者的结果插入第一项
            temparr.splice(0,2,newvalue)
        }

        return newvalue
    }

    let  arr=[1,2,3,4]

    arr.myreduce((pre,cur,index,arrry)=>{
        console.log(pre);
        return pre+cur+1
    },20)

map会对返回对数组进行操作后的结果

//map方法 (cur,index,array)=>{}
    let arr2=[1,2,3,4]
    Array.prototype.mymap=function(fn){

        let resultarr=[]

        this.forEach((v,i)=>{
            resultarr.push(fn(v,i,this))
        })

        return resultarr
    }

    let res=arr2.mymap((v,i)=>{
        console.log(i);
        return v*v
    })
    console.log(res);