一、forEach
//forEach() 遍历数组 参数1:函数 参数2:改变函数中的this指向
var arr = ['lcy','xyy','wjj','zj']
var obj = {};
arr.forEach(funtion(value,index,_arr){
//value: 数组中的每一项数据
//index: 每一项数据对应的下标
//_arr: 该数据本身
// console.log(arguments);
// console.log(value,index,_arr);
// console.log(this);
},obj)
//源码
Array.prototype.myForEach = function(){
var fn = arguments[0];
var target = arguments[1] || window;
for(var i=0; i<this.length;i++){
fn.call(target,this[i],i,this)
}
}
二、Array.prototype.map
//map()方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。
arr = [11,22,33,44]
//源码
Array.prototype.myMap = function(){
//获取第一个参数
var fn = arguments[0];
//获取this指向
var target = arguments[1] || window;
//创建一个新数组
var newArr = [];
for(i=0;i<this.length;i++){
newArr.push(fn.call(target,this[i],i,this))
}
return newArr;
}
三、find findIndex
//find 查找第一个满足条件的元素,返回元素本身,如果没有找到返回undefined
var arr = [1,2,3,4,5];
//源码
Array.prototype.Myfind = function(){
var fn = arguments[0];
var target = arguments[1] || window;
for(var i=0;i<this.length;i++){
if(fn.call(target,this[i],i,this)){
return this[i]
}
}
return undefined
}
//findIndex:查找第一个满足条件的元素,返回元素的下标,如果没有找到,返回-1
Array.prototype.MyfindIndex = function(){
var fn = arguments[0];
var target = arguments[1] || window;
for(var i=0;i<this.length;i++){
if(fn.call(target,this[i],i,this)){
return i;
}
}
return -1;
}
四、reduce
方法对数组中的每个元素按序执行一个由您提供的 reducer 函数,每一次运行 reducer 会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。
//reduce
var arr = [0,1,2,3,4];
Array.prototype.MyReduce = function(){
var fn = arguments[0];
//第二个参数
var startValue = arguments[1];
//如果第二个参数有值
if(startValue || startValue ===0){
for(var i=0;i<this.length;i++){
startValue = fn(startValue,this[i],i,this)
}
return startValue;
}else{
//没有值的情况
startValue = this[0];
for(i=1;i<this.length;i++){
startValue = fn(startValue,this[i],i,this);
}
return startValue;
}
}