使用高階函式實現Array物件的方法
阿新 • • 發佈:2021-06-21
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
})
這次我們就先實現這幾個常用的方法,等抽空,我們爭取把陣列的所有方法都實現一遍。