js基础--几种数组方法的原生实现

Array.prototype.map=function(fn){
    let result=[]
    for(let i=0;i<this.length;i++){
        result.push(fn(this[i],i,this))

    }
    return result
}


Array.prototype.forEach=function(fn){
    for(let i=0;i<this.length;i++){
        fn(this[i],i,this)
    }
}


Array.prototype.filter=function(fn){
    let result=[]
    for(let i=0;i<this.length;i++){
        if(fn(this[i],i,this)){
            result.push(this[i])
        }
    }
    return result;
}


Array.prototype.reduce = function(fn,ini){
    let index
    let value
    if(ini){
        index=0
        value=ini
    }else{
        index=1
        value=this[0]
    }
    for(;index<this.length;index++){
        value = fn(value,this[index],index,this)
    }
    return value
}
console.log([1,2,3,4].reduce((pre,next,i)=>{
    return pre+next;
}))

数组扁平化

function flatten1(arr){ #递归
    return arr.reduce(function(pre,next){
        return pre.concat(Array.isArray(next)? flatten1(next): next)
    },[])
}

function flatten2(arr){
    return arr.toString().split(',').map(item=>{
        return parseInt(item)
    })
}
//如果不是数字,直接 return arr.toString().split(',')下同
function flatten3(arr){
    return arr.join(',').split(',').map(item=>{
        return parseInt(item)
    })
}

function flatten4(arr){ #递归
    let res=[]
    arr.forEach(item=>{
        if(Array.isArray(item)){
            res = res.concat(flatten4(item))
        }else{
            res.push(item)
        }
    })
  return res
}
#不递归 循环
function flatten5(arr){
    while(arr.some(item=>Array.isArray(item))){
        arr = [].concat(...arr)
    }
    return arr
}
posted @ 2021-04-19 15:49  爬塔游戏  阅读(82)  评论(0)    收藏  举报