使用高阶函数实现Array对象的方法

Array 原型上有很多数组的方法。例如 map, every, some,filter,forEach等,今天我们就使用高阶函数来mock以上的功能。
以上方法怎么使用,就不再举例说明了,大家应该都用的滚瓜烂熟了。常用的使用模式都是这样的。

[1,2,3,4,5].forEach((item, index) => {
     console.log(item)
})

那么什么是高阶函数呢?大家都知道,在JS的世界里,函数是一等公民,函数既可以做参数,也可以做函数的返回值,跟普通的变量没有区别。例如:

function add (fn) {
  return fn
}

大概解释清楚概念后,我们就使用高阶函数的理念,分别通过原生的JS来实现以上数组的几种方法:

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

forEach([1,2,3,4], (item, i) => {
    console.log(item)
})
  • filter
function filter(array, fn) {
    let _arr = []
    for(let i = 0; i< array.length; i++) {
         if(fn(array[i],i)) {
             _arr.push(array[i])
         }
    }
    return _arr
}

let cc = filter([2,3,4,4,5,5,6,6], (item, i) => {
    return item % 2 === 0
})

console.log(cc);
  • some
function some (array, fn) {
    let flag = false
    for(let i = 0; i< array.length; i++) {
        if ((fn(array[i],i))) {
            flag = true
            break
        }  
   }
   return flag
}

let dd = some([1,2,4,4,4,5], (item) => {
    return item > 3
})

  • every
function every(array, fn) {
    let flag = true
    for(let i = 0; i< array.length; i++) {
        if (!(fn(array[i],i))) {
            flag = false
            break
        }  
   }
   return flag
}

let ff = every([1,2,4,4,4,5], (item) => {
    return item > 0
})
  • map
function map (array, fn) {
    let _arr = []
    for(let i = 0; i< array.length; i++) { 
        _arr.push(fn(array[i], i))
    }
    return _arr
}

let ee = [1,2,3,4].map(item => {
    return item * 2
})

这次我们就先实现这几个常用的方法,等抽空,我们争取把数组的所有方法都实现一遍。

posted @ 2021-06-20 22:32  eastsae  阅读(38)  评论(0编辑  收藏  举报