- forEach
Array.prototype.myForEach = function (callback, thisArg) { const O = Object(this) // this 就是当前的数组 const len = O.length >>> 0 // 后面有解释 let k = 0 while (k < len) { if (k in O) { callback.call(thisArg, O[k], k, O); } k++; } }
- map
Array.prototype.myMap = function (callback, thisArg) {
const O = Object(this) // this 就是当前的数组
const len = O.length >>> 0 // 后面有解释
let k = 0
let res = []
while (k < len) {
if (k in O) {
res[k] = callback.call(thisArg, O[k], k, O);
}
k++;
}
return res
}
3.filter
Array.prototype.myFilter = function (callback, thisArg) {
const O = Object(this) // this 就是当前的数组
const len = O.length >>> 0 // 后面有解释
let k = 0
let res = []
while (k < len) {
if (k in O) {
if (callback.call(thisArg, O[k], k, O)) {
res.push(O[k])
}
}
k++;
}
return res
}
4.mySome
Array.prototype.mySome = function (callback, thisArg) {
const O = Object(this) // this 就是当前的数组
const len = O.length >>> 0 // 后面有解释
let k = 0
while (k < len) {
if (k in O) {
if (callback.call(thisArg, O[k], k, O)) {
return true
}
}
k++;
}
return false
}
5.reduce
Array.prototype.myReduce = function (callback, initialValue) {
const O = Object(this) // this 就是当前的数组
const len = O.length >>> 0 // 后面有解释
let k = 0, acc;
if (arguments.length > 1) {
acc = initialValue
} else {
// 判断 k 小于 len 并且 k 不存在数组里
while (k < len && !(k in O)) {
k++
}
if (k > len) {
throw new TypeError('Reduce of empty array with no initial value');
}
acc = O[k++]
}
while (k < len) {
if (k in O) {
acc = callback(acc, O[k], k, O)
}
k++
}
return acc
}