手写js原生数组的方法

72 阅读1分钟

1.手写forEach

Array.prototype.myForEach = function (callback) {
	console.log('this',this)
        console.log('callback',callback)
    for (let i = 0; i < this.length;i ++) {
        callback(this[i],i)
    }
}

2.调用myForeach

const arr = [1,2,4,6]
arr.myForEach((item,index) => {
    console.log(item,index)
})

image.png

2.手写map

        const arr = [1,2,4,6]
	Array.prototype.fakeMap = function (fn,context){
            console.log('this',this)
            console.log('fn',fn)
            console.log('context',context)
             let arr=this
             let temp=[]
             for(let i = 0;i<arr.length;i++){
               let result = fn.call(context,arr[i],i,arr)   //call的作用 把fn函数挂载到context
               temp.push(result)
             }
             return temp
    }

    const arrMap = arr.fakeMap((item) => item+1)
    console.log('arrMap',arrMap)

image.png

3.filter实现

Array.prototype.MyFilter = function (callback) {
        if (typeof callback !== 'function') return;
        let res = []
        for(let i = 0; i < this.length;i++) {
                if (callback(this[i])) {
                        res.push(this[i])
                }
        }
        return res;
}

const arr = [1,2,4,6]

const arrFilter = arr.MyFilter(item => item > 2)
console.log('arrFilter',arrFilter)