/**
* every()对数组中的每一项运行给定的的函数,如果任意每一项满足要求,就返回true,不满足就返回false
* 不受执行函数的影响
* 注意:every不会对空数组进行检测,不会改变原始数组
*/
//封装 重写every() --> myEvery()
Array.prototype.myEvery = function(fn){
var arr = this;
for(var i =0;i<arr.length;i++){
var bool = fn(arr[i],i,arr);
if(bool) return false;
}
return true;
}
var arr = [100,200,300,400];
var result1 = arr.myEvery(function(item,index,arr){
return item > 200;
});
console.log(result1);//false 都大于200才返回true
/**
* some();对数组中的每一项运行给定的函数,如果有任意一项满足,则返回true
*/
//封装 重写 some() -->mySome()
Array.prototype.mySome = function(fn){
// var arr = this;
for(var i =0;i<this.length;i++){
var bool = fn(this[i],i,this);
if(bool) return true ;
}
return false;
}
var arr = [1,2,3,4];
var result2 = arr.mySome(function(item,index,arr){
return item>2;
});
console.log(result2);//true 有一项大于200就返回true,都不大于200则返回false
/**
* filter()过滤,给数组中的每一项运行给定的 函数,满足要求的留着,不满足要求的不要,返回的是满足要求的数据项组成的数组
*/
//封装 filter --> myFilter()
Array.prototype.myFilter = function(fn){
var result=[];
for(var index in this){
var bool = fn(this[index],index,this);//迭代
if(bool) result.push(this[index]);
//result[result.length]=result[index]
}
return result ;
}
var arr = [1,2,3,4,5,6];
var result = arr.myFilter(function(item,index,arr){
return item >2;
});
console.log(result);
//关于过滤的另外一种封装方法
Array.prototype.myFilter = function(fn){
var arr = this;//数组本身
len = arr.length;//数组长度
arg = arguments[1]||global;//如果有第二个参数,this就指向它,没有的话就指向global
newArr = [];//定义新数组
for(var i=0;i<len;i++){
item = JSON.parse(JSON.stringify(arr[i]));//深拷贝
fn.apply(arg,[item,i,arr])? newArr.push(item):''
//条件为真添加到newArr里面,假就返回空
}
return newArr;//返回新数组
}
var arr = [1,2,3,4,5,6];
var result = arr.myFilter(function(item,index,arr){
return item >3;
});
console.log(result);
/**
* forEach()对数组中的每一项运行给定的函数,没有返回值,常用来遍历
* 注意:forEach()对于空数组是不会执行回调函数的
*/
//封装 重写forEach()--->myForEach()
Array.prototype.myForEach = function(fn){
for(var i =0;i<this.length;i++){
fn(this[i],i,this)
}
}
/**
* map()给数组中的每一项运行给定的函数,返回每次函数调用的结果形成的数组
* 一一映射
*/
//封装 重写map()-->myMap()
Array.prototype.myMap = function(fn){
var result = [];
this.myForEach(function(item,index,arr){ //使用了上面的forEach()的重写
var r = fn(item,index,arr);
result.push(r);
});
return result;
}
var arr = [1,2,3,4,5,6];
var result = arr.myMap(function(item,index,arr){
return item*3;
});
console.log(result);