话不多说,直接上代码; 有大佬看到的话,有其他更好的实现方式希望能给予指导; 性能,代码优化暂时没考虑; 前端菜鸟,勿喷,谢谢!
const numbers = ['a', 'b', 'c', 'd', 'e', 'f', NaN]
1.Array.forEach()
Array.prototype.definedForEach = function (callback) {
if (Array.isArray(this)) {
for(let i = 0; i < this.length; i++) {
callback.call(undefined, this[i], i, this)
}
} else {
throw new Error('argumnets type error, muse be a Array object')
}
}
numbers.definedForEach((currentvalue, index, array) => {
// console.log(currentvalue, index, array)
})
2. Array.map()
Array.prototype.definedMap = function (callback) {
if (Array.isArray(this)) {
const result = []
for(let i = 0; i < this.length; i++) {
result[i] = callback.call(undefined, this[i], i, this)
}
return result
} else {
throw new Error('argumnets type error, muse be a Array object')
}
}
const numbersMap = numbers.definedMap((currentvalue, index) => `${currentvalue}${index}`)
// console.log(numbersMap)
3. Array.filter()
Array.prototype.definedFilter = function (callback) {
if (Array.isArray(this)) {
const result = []
for(let i = 0; i < this.length; i++) {
callback.call(undefined, this[i], i, this) ? result.push(this[i]) : undefined
}
return result
} else {
throw new Error('argumnets type error, muse be a Array object')
}
}
const numbersFilter = numbers.definedFilter(currentvalue => currentvalue === 'a' || currentvalue === 'b')
// console.log(numbersFilter)
4. Array.some()// 数组遍历方法,有一个满足就返回true,否则返回false
Array.prototype.definedSome = function (callback) {
if (Array.isArray(this)) {
let result = []
for (let i = 0; i < this.length; i++) {
result[i] = callback.call(undefined, this[i], i, this)
}
return result.includes(true)
} else {
throw new Error('argumnets type error, muse be a Array object')
}
}
const numbersSome = numbers.definedSome(currentvalue => currentvalue === 'a')
// console.log(numbersSome)
5.Array.every() // 数组遍历方法,有一个满足就返回true,否则返回false
Array.prototype.definedEvery = function (callback) {
if (Array.isArray(this)) {
const result = []
for (let i = 0; i < this.length; i++) {
result[i] = callback.call(undefined, this[i], i, this)
}
// 既有true又有false, 返回false
if (result.includes(true) && result.includes(false)) {
return false
// 只有true 返回true
} else if (result.includes(true) && !result.includes(false)) {
return true
// 只有false 返回false
} else if(result.includes(false) && !result.includes(true)) {
return false
} else {
return
}
} else {
throw new Error('argumnets type error, muse be a Array object')
}
}
const arr = [11, 12, 13]
const numbersEvery = arr.definedEvery(currentvalue => currentvalue > 10)
console.log(numbersEvery)