JS : 手写foreach、map、filter、some、find

为啥要重复造轮子 ? 是bug都改完了 ?还是头上那几根随风摇曳的毛还健在 ? 活着不好吗 ?

因为· · ·

因为爱情 不会轻易悲伤

所以一切都是幸福的 · · ·(给劳资关上你的gangmen)

因为面试官喜欢啊

你为什么说这么多话??? 你肯定不是一个好的程序员 , 别BB ,快去干 · · · ·

forEach : 遍历数组的所有元素

<code>var arr = ['a', 'b', 'c', 'd', 'e'] 
Array.prototype.myForEach = function (fn) {
// 如果fn 不是函数 则直接抛错误
if (typeof fn != 'function') {
throw new Error(`${fn} is not a function`)
return
}
// 当前this代表被调用的的数组
var _arr = this
for (var i = 0; i < _arr.length; i++) {
fn(_arr[i], i, _arr)
}
}

arr.myForEach((ite, ind, arr) => {
console.log(ite, ind, arr)
return ite
})/<code>

map : 映射,遍历数组并且返回一个新的数组

<code>var arr = ['a', 'b', 'c', 'd', 'e'] 
Array.prototype.myMap = function (fn) {
\tif (typeof fn != 'function') {

throw new Error(`${fn} is not a function`)
return
}
// 声明一个新的数组
var newArr = []
var _arr = this
for (var i = 0; i < _arr.length; i++) {
// 调用fn函数,并且把每一项的返回结果放入新数组中
newArr.push(fn(_arr[i], i, _arr))
}
// 返回新数组
return newArr
}

let mapNewarr = arr.myMap((ite, ind) => {
return ite
})
console.log(mapNewarr) //  ["a", "b", "c", "d", "e"]/<code>

filter : 返回满足条件的每一项到新的数组

<code> var arr2 = [4242, 767, 2, -4, 0, '-333']
Array.prototype.myFilter = function (fn) {
if (typeof fn != 'function') {
throw new Error(`${fn} is not a function`)
return
}
var _arr = this
var newArr = []
for (var i = 0; i < _arr.length; i++) {
// 调用fn函数返回结果,如果满足条件则把此项放入新数组中
fn(_arr[i], i, _arr) && newArr.push(_arr[i])
}
return newArr
}

var filNewarr = arr2.myFilter((ite, ind) => {
return parseInt(ite) > 0
})
console.log(filNewarr) // (3) [4242, 767, 2]/<code>

find : 返回满足条件的第一个元素值

<code> var arr2 = [4242, 767, 2, -4, 0, '-333']
Array.prototype.myFind = function (fn) {
if (typeof fn != 'function') {
throw new Error(`${fn} is not a function`)
return
}
var _arr = this
for (var i = 0; i < _arr.length; i++) {
// 如果当前元素满足,则返回此元素
if (fn(_arr[i])) {
return _arr[i]
}
}
}

let findNewarr = arr2.myFind((ite, ind) => {
return ite > 0
})
console.log(findNewarr) // 4242/<code>

every : 判断数组中每一项是否都满足条件,如果是返回true,否则返回false

<code>Array.prototype.myEvery = function (fn) {
if (typeof fn != 'function') {
throw new Error(`${fn} is not a function`)
return
}
var _arr = this
for (var i = 0; i < _arr.length; i++) {
// 如果数组中有一项不满足条件,则返回false
if (!fn(_arr[i])) {
return false
}
}
// 否则返回true(循环遍历已经完成,没有为false的)
return true
}

let everyNewarr = arr2.myEvery((ite, ind) => {
return ite > 0
})

console.log(everyNewarr) // false/<code>

some : 判断数组中是否有一项满足条件,如果有返回true,否则返回false

<code>Array.prototype.mySome = function (fn) {
if (typeof fn != 'function') {
throw new Error(`${fn} is not a function`)
return
}
var _arr = this
for (var i = 0; i < _arr.length; i++) {
//当前项如果满足条件则返回true
if (fn(_arr[i])) {
return true
}
}
// 循环遍历已经完成,依然没有一项为true,则返回false
return false
}

let someNewarr = arr2.mySome((ite, ind) => {
return ite > 0
})

console.log(someNewarr) // true/<code>


摸摸头,谁还不是个宝宝 · · · ·

咦,宝宝头上那几根随风摇曳的倔强呢 ???


就这样我丢失了我的倔强与希望· · · · · ·


分享到:


相關文章: