1. 程式人生 > 其它 >使用高階函式實現Array物件的方法

使用高階函式實現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
})

這次我們就先實現這幾個常用的方法,等抽空,我們爭取把陣列的所有方法都實現一遍。