1.reduce函数实现
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
Array.prototype._reduce = function (fn,initVal,context) {
let arr = Array.prototype.slice.call(this);
for(let i=0;i<arr.length;i++){
initVal = fn.call(context,initVal,arr[i],i,this);
}
return initVal
};
let arr1=[2,4,6,8];
let result1=arr1._reduce(function (val,item,index,origin) {
return val+item
},0);
console.log(result1) //20
2.map函数实现
map()方法返回一个新数组,数组中的元素为原始数组元素调用函数处理的后值。
Array.prototype._map = function (fn,initVal,context) {
let arr = Array.prototype.slice.call(this);
let ret = [];
for(let i=0;i<arr.length;i++){
ret.push(fn.call(context,arr[i],i,this));
}
return ret
};
//reduce实现
Array.prototype._map2 = function (fn,context) {
let arr = Array.prototype.slice.call(this);
let ret = [];
return arr._reduce((init,cur,i)=>{
return [...init,fn.call(context,cur,i,this)]
},[])
};
let arr2=[2,4,6,8];
let result2 = arr2._map(function(item,index,origin){
return item*2;
});
console.log(result2) // [4,8,12,16]
3.filter 函数实现
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
Array.prototype._filter = function (fn,context) {
let arr = Array.prototype.slice.call(this);
let ret = [];
for (let i = 0; i < arr.length; i++) {
fn.call(context,arr[i],i,this)&&newArr.push(arr[i])
}
return ret;
};
//reduce实现
Array.prototype._filter2 = function (fn,context) {
let arr = Array.prototype.slice.call(this);
return arr.reduce((init,cur,i)=>{
return fn.call(context,cur,index,this)?[...init,cur]:[...init];
},[])
}
let arr3=[2,4,6,8];
let result3 = arr3._filter(function(item,index,origin){
return item>4;
});
console.log(result3) // [6,8]
4.find 函数实现
find() 方法返回通过测试(函数内判断)的数组的第一个元素的值,都不符合条件返回undefined
Array.prototype._find = function (fn,context) {
let arr = Array.prototype.slice.call(this);
for (let i = 0; i < arr.length; i++) {
if (fn.call(context,arr[i],i,this)) {
return arr[i];
}
}
};
let arr4=[2,4,6,8];
let result4 = arr4._find(function(item,index,origin){
return item>4;
});
console.log(result4) // 6
5.every 函数实现
every()方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
如果所有元素都满足条件,则返回 true。
Array.prototype._every = function (fn,context) {
let arr = Array.prototype.slice.call(this);
for (let i = 0; i < arr.length; i++) {
if (!fn.call(context,arr[i],i,this)) {
return false;
}
}
return true;
};
let arr5=[2,4,6,8];
let result5 = arr5._every(function(item,index,origin){
return item>4;
});
console.log(result5) // false
6.some 函数实现
some()方法用于检测数组中的元素是否满足指定条件(函数提供)。
如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
如果没有满足条件的元素,则返回false。
Array.prototype._some = function (fn,context) {
let arr = Array.prototype.slice.call(this);
for (let i = 0; i < arr.length; i++) {
if (fn.call(context,arr[i],i,this)) {
return true;
}
}
return false;
};
let arr6=[2,4,6,8];
let result6 = arr6._some(function(item,index,origin){
return item>4;
});
console.log(result6) // true