Array.prototype.myForEach=function(fn){let arr =this,
len = arr.length,
arg2 = arguments[1]|| window;for(let i =0; i < len.length; i++){
fn.apply(arg2,[arr[i], i, arr]);}}
Array.prototype.myFilter=function(fn){let arr =this,
len = arr.length,
args = arguments[1]|| window,
res =[],
item;for(let i =0; i < len; i++){
item = tools.deepClone(arr[i]);// 进行深拷贝,避免互相之间的影响if(fn.apply(args,[arr[i], i, arr])) res.push(item);}return res;}
map
Array.prototype.myMap=function(fn){let arr =this,
len = arr.length,
args = arguments[1]|| window,
nArr =[],
item;for(let i =0; i < len; i++){
item = tools.deepClone(arr[i]);//同理
nArr.push(fn.apply(args,[item, i, arr]));}return nArr;}
every/ some every: 只要有一个不满足条件就会停止遍历并且返回false,需要每一项都满足才会返回true some: 只要有一个满足条件就会停止遍历;返回值是bool 参数与其他一致。
Array.prototype.myEvery=function(fn){let arr =this,
len = arr.length,
args = arguments[1]|| window,
flag =true;for(let i =0; i < len; i++){if(!fn.apply(args,[arr[i], i, arr])){
flag =false;break;}}return flag;}
Array.prototype.mySome=function(fn){let arr =this,
len = arr.length,
args = arguments[1]|| window,
flag =false;for(let i =0; i < len; i++){if(fn.apply(args,[arr[i], i, arr])){
flag =true;break;}}return flag;}
reduce/ reduceRight
let data =[1,1,3,4];let nValue = data.reduce(function(pre, elem, index, arr){return pre + elem // 需要给pre重新return值},0)
console.log(nValue);// 9
let data =[1,1,3,4];let nValue = data.reduce(function(pre, elem, index, arr){
pre.push(elem);return pre
},[])let nValue2 = data.reduce(function(pre, elem, index, arr){
pre.push(elem);return pre
},[])
console.log(nValue, nValue2);// [1, 1, 3, 4] [4, 3, 1, 1]倒序
Array.prototype.myReduce=functiontest(fn, initialValue){let arr =this,
len = arr.length;for(let i =0; i < len; i++){
initialValue =fn(initialValue, arr[i], i, arr);}return initialValue;}
Array.prototype.myReduceRight=functiontest(fn, initialValue){let arr =this,
len = arr.length,
item;for(let i = len -1; i >=0; i--){
item = tools.deepClone(arr[i]);
initialValue =fn(initialValue, item, i, arr);}return initialValue;}