一. every
Array.prototype.myEvery = function(fn) {
let arr = this;
let newThis = arguments[1];
let flag = true;
for(let i = 0; i< arr.length;i++) {
if(!fn.apply(newThis,[arr[i],i,arr])) {
flag = false;
break
}
}
return flag
}
二. some
Array.prototype.mySome = function(fn) {
let arr = this;
let newThis = arguments[1];
let flag = false;
for(let i = 0; i< arr.length;i++) {
if(fn.apply(newThis,[arr[i],i,arr])) {
flag = true;
break;
}
}
return flag
}
三. reduce
封装思路:
- 传参其实在item,index,arr三个传参里面多了一个pre传参,该pre的值为初始的inital 的值;
- reduce里面的函数每调用一次就更新一次pre值,最终的返回值则是最终的pre值;
- 第二个参数initValue为必传
示例代码如下
Array.prototype.myReduce = function(fn,initValue) {
let arr = this;
let newThis = arguments[2];
let pre = initValue;
for(let i = 0;i< arr.length;i++) {
pre = fn.apply(newThis,[pre,arr[i],i,arr])
}
return pre
}
四. includes
特性如下:
- includes第二个参数表示遍历的范围,下标值,不传,则默认为0;
- 如果第二个参数为正数,且大于调用数组的最大下标时,返回false;
- 如果第二个下标为负数,加上调用数组的长度后仍然为负数时,则默认从0遍历
封装代码如下
Array.prototype.myIncludes = function(value) {
let arr = this;
let fromIndex = arguments[1] || 0
let tempIndex = Math.max(fromIndex<0?arr.length+fromIndex: fromIndex,0)
while(tempIndex < arr.length) {
if(arr[tempIndex] === value) {
return true
}
tempIndex++
}
return false
}