1.myForeach
let arr = ['a', 'b', 'c', 'd', 'e', 'f', 100]
Array.prototype.myForeach = function (fn) {
// 如果不是函数 抛异常
if (!Object.prototype.toString.call(fn) == '[object Function]') {
throw new Error(`${fn} is no a function`)
}
let param = this
for (var i = 0; i < param.length; i++) {
fn(param[i], i, param)
}
}
arr.myForeach((item, index, param) => {
console.log(item, index, param)
return (arr[index])
})
console.log(arr)
2.myMap
let arr = [134, 134, 14, 134, 134, 123, 100]
// map : 映射,遍历数组并且返回一个新的数组
Array.prototype.myMap = function (fn) {
// 如果不是函数 抛错
if (!Object.prototype.toString.call(fn) == '[object Function]') {
return new Error(`${fn} is no a function`)
}
var param = this
var paramArray = []
for (var i = 0; i < param.length; i++) {
// 调用返回的每一项都放到新数组中
paramArray.push(fn(param[i], i, param))
}
// 返回新数组
return paramArray
}
let newArray = arr.myMap((item, index) => {
return item+1
})
console.log(newArray)
3.myFilter
let arr = [134, 134, 14, 134, 134, 123, 100]
Array.prototype.myFilter = function (fn) {
// filter: 返回满足条件的每一项到新数组
if (!Object.prototype.toString.call(fn) == '[object Function]') {
return new Error(`${fn} is no a function`)
}
let param = this
let newArray = []
for (var i = 0; i < param.length; i++) {
if (fn(param[i], i, param)) {
newArray.push(param[i])
}
}
return newArray
}
let filterArray = arr.myFilter((item) => {
return item == '100'
})
console.log(filterArray)
4.myFind,没有返回undefined
let arr = [134, 134, 14, 134, 134, 1230, 100]
// find: 返回满足条件的第一个元素
Array.prototype.myFind = function (fn) {
if (typeof fn != 'function') {
return new Error(`${fn} is no a function`)
}
let param = this
for (var i = 0; i < param.length; i++) {
if (fn(param[i], i, param)) {
// 如果当前元素满足,则返回此元素
return param[i]
}
}
}
let findArray = arr.myFind((item) => {
return item > 134
})
console.log(findArray)
5.myEvery
let arr = [134, 134, 14, 134, 134, 1230, 100]
// every: 判断数组中每一项是否满足条件 如有是返回true 否则返回false
Array.prototype.myEvery = function (fn) {
if (typeof fn != 'function') {
return new Error(`${fn} is no a function`)
}
let param = this
for (var i = 0; i < param.length; i++) {
if (!fn(param[i], i, param)) {
// 如果当前元素满足,则返回此元素
return false
}
}
// 否则返回true(循环遍历已经完成,没有为false的)
return true
}
let everyArray = arr.myEvery((item) => {
return item > 10
})
console.log(everyArray)
**6.mySome **
let arr = [134, 134, 14, 134, 134, 1230, 100]
// some: 判断数组中是否有一项满足条件,如果有返回true,否则返回false
Array.prototype.mySome = function (fn) {
if (typeof fn != 'function') {
return new Error(`${fn} is no a function`)
}
let param = this
for (var i = 0; i < param.length; i++) {
if (!fn(param[i], i, param)) {
// 如果当前元素满足,则返回此元素
return true
}
}
return false
}
let SomeArray = arr.mySome((item) => {
return item > 100000
})
console.log(SomeArray)