重构every,如果有一项不满足的就会直接返回false,不再继续往后判断。只有全部都满足,才会返回true。
let arr=[1,2,3,4,5];
Array.prototype.myEvery=function(fun,obj){
for(i=0;i<arr.length;i++){
// this---arr 使用this代替arr 被谁调用指向谁 arr被myEvery调用
// 如果第二个参数存在,就发生this指向的修改
if(!obj?fun.bind(obj)(this[i]):fun(this[i])){
return false
}
}
return true
}
// 上面相当于 function myEvery(){} 声明了一个函数
// 下面相当于myEvery() 函数调用
// item当前对象,index当前索引,arr数组对象
let result=arr.myEvery(function(item,index,arr){
console.log(this);
//这里的是this指向第二个参数,当没有第二个参数指向global,第二个参数可以是任意数据类型,比如字符串,对象等
return item>1
},{ name: 'zhansgan' });
console.log(result);
重构some时,如果有一项满足直接返回true,不再往后判断,直接返回true。只有全部不满足,才会返回false。
let arr=[1,2,3,4,5];
Array.prototype.mySome=function(fun,obj){
for(i=0;i<arr.length;i++){
if(obj?fun.bind(obj)(this[i]):fun(this[i])){
return true;
}
}
return false;
}
let result=arr.some(function(item,index,arr){
//打印了两次,第一次是执行,第二次是查找打印
console.log(this);
return item>1
},{ name: 'zhansgan' });
console.log(result);
重构filter,返回满足条件的新数组。
let arr=[1,2,3,4,5];
Array.prototype.myFilter=function(fun,obj){
let result=[];
for(i=0;i<arr.length;i++){
if(obj?fun.bind(obj)(this[i]):fun(this[i])){
result.push(this[i]);
}
}
return result;
}
let result=arr.filter(function(item,index,arr){
// 共打印五次,满足条件打印
console.log(this);
return item>1
},{ name: 'zhansgan' });
console.log(result);
重构map映射,对每一项数组项进行操作,返回的是操作后的一个新数组。
let arr=[1,2,3,4,5];
Array.prototype.myMap=function(fun,obj){
let result=[];
for(i=0;i<arr.length;i++){
result.push(obj?fun(obj)(this[i]):fun(this[i]))
}
return result;
};
let result=arr.map(function(item,index,arr){
// 共打印五次,满足条件打印
console.log(this);
return item+1;
},{ name: 'zhansgan' });
console.log(result);
重构forEach,用于调用数组的每个元素,并将元素传递给回调函数。
let arr=[1,2,3,4,5];
Array.prototype.myForEach=function(fun){
for(i=0;i<this.length;i++){
fun(this[i],i,this)
}
}
let result=arr.myForEach(function(item,index,arr){
console.log(item,index,arr)
});