map,filter,some,foreach,every,reduce底层原理

240 阅读1分钟

1.简单模式

 Array.prototype.myMap=function(f){    let a=[];    for (let i=0;i<this.length;i++){        a.push(f(this[i]))    }    return a;  }
  Array.prototype.myReduce=function (f,value=0) {    for (let i =0 ;i<this.length;i++){        value=f(this[i],value)    }    return value}Array.prototype.myFilter=function (f,value=0) {    let a=[]    for (let i =0 ;i<this.length;i++){        let flag=f(this[i],value)        if (flag) a.push(this[i])    }    return a}Array.prototype.myForEach=function (f) {    for (let i=0;i<this.length;i++){        f(this[i])    }}Array.prototype.mySome=function (f) {    let flag=false;    for (let i=0;i<this.length;i++){        flag =f(this[i])        if (flag) return flag    }    return flag;}Array.prototype.myEvery=function (f) {    let flag=true    for (let i=0;i<this.length;i++){        flag =f(this[i])        if (!flag) return flag    }    return flag}

2.完整模式

    Array.prototype.myForEach=function(){            if(arguments.length==1&&typeof arguments[0]=="function"){                for(var i=0;i<this.length;i++){                    arguments[0].call(window,this[i],i,this)                }            }else if(arguments.length==2){                for(var i=0;i<this.length;i++){                    arguments[0].call(arguments[1],this[i],i,this);                }            }        }     Array.prototype.mySome=function(){            if(arguments.length==1&&typeof arguments[0]=="function"){                for(var i=0;i<this.length;i++){                    arguments[0].call(window,this[i],i,this);                    var flag=arguments[0](this[i],i,this)                    if(flag){                        return flag;                    }                }            }             return false;        }        Array.prototype.myEvery=function(){            var flag=true;            if(arguments.length==1&&typeof arguments[0]=="function"){                for(var i=0;i<this.length;i++){                    arguments[0].call(window,this[i],i,this)                    flag=arguments[0](this[i],i,this)                    if(!flag){                        return flag;                    }                }            }            return flag;        }   Array.prototype.myMap=function(){            if(arguments.length==1&& typeof arguments[0]=="function"){                 var newarr=[];                for(var i=0;i<this.length;i++){                    arguments[0].call(window,this[i],i,this);                    var new_num=arguments[0](this[i],i,this);                    newarr.push(new_num);                }            }            return newarr        }        Array.prototype.myFilter=function(){            if(arguments.length==1&&typeof arguments[0]=="function"){                var newarr=[];                for(var i=0;i<this.length;i++){                    arguments[0].call(window,this[i],i,this);                    var flag=arguments[0](this[i],i,this);                    if(flag){                        newarr.push(this[i]);                    }                }            }            return newarr;        }