ES5数组方法详解,并重写
ES5新增了几个数组方法,但是ie8及以下不支持这些方法,于是就需要重写一个自己的方法来提高兼容性!
看重写的方法有助与理解哦!(。・ω・。)ノ♡
文章目录
新增的数组方法
- forEach
- filter
- map
- reduce
- reduceRight
- every
- some
提示:以下是本篇文章正文内容,下面案例可供参考
一、数组功能解释
1. forEach方法
forEach 方法 用于遍历数组
参数: 一个回调函数
回调函数的形参可以写三个
- 第一个表示数组中的某一项
- 第二个表示该项的索引(数组的下标)
- 第三个表示原数组
返回值: 无
var arr = [1,2,3];
arr.forEach(function(item,index,OriginArr){ //形参个数可按需写
//进行的操作
})
filter方法
遍历数组 将满足条件的项(回调中 return true )通过数组返回(返回值是这个新数组)
参数: 一个回调函数
回调函数的形参可以写三个
- 第一个表示数组中的某一项
- 第二个表示该项的索引(数组的下标)
- 第三个表示原数组
返回值: 数组
var arr = [1,2,3],
arr1 = arr.filter(function(item,index,OriginArr){
return item > 1; //return true 的时候才将item加入到新数组
})
//arr1 = [2,3]
map
遍历数组 将每次回调的返回值(回调中 return value)通过数组返回(返回值是这个新数组)
参数: 一个回调函数
回调函数的形参可以写三个
- 第一个表示数组中的某一项
- 第二个表示该项的索引(数组的下标)
- 第三个表示原数组
返回值: 数组
var arr = [1,2,3],
arr1 = arr.map(function(item,index,OriginArr){
return 5+index; //return value ---> 将value加入到新数组
})
//arr1 = [5,6,7]
reduce/reduceRight
首先明白 该方法是返回一个 “数据” (该数据是最后一次回调的返回值)!!
有两个参数:
@fn: 回调函数
@value:初始数据(若不传则将数组的第一位作为初始值,并从数组第二位开始遍历)
解释一下回调函数的执行
回调函数实参列表: value , item , index , originArr
value 上次回调函数的返回值
reduceRight 数组从后向前执行回调
var arr = [1,2,3],
resValue = arr.reduce(function(value,item,index,OriginArr){
return value + item; //return value ---> 将value加入到下一次回调的第一个实参
})
//resValue = 6
var arr = [1,2,3],
resValue = arr.reduce(function(value,item,index,OriginArr){
return value + item; //return value ---> 将value加入到下一次回调的第一个实参
},1) //<----传入参数
//resValue = 7
every/some方法
返回的是一个boolean值
every 每个回调都返回true 的话 就返回true
some 某个回调返回true的话 返回true
var arr = [1,2,3],
resValue = arr.every(function(item,index,OriginArr){
return item > 1; //return boolean值
})
//resValue = fasle
var arr = [1,2,3],
resValue = arr.some(function(item,index,OriginArr){
return item > 1; //return boolean值
})
//resValue = true
二、方法重写
1.重写forEach方法
代码如下(示例):
//重写forEach
Array.prototype.myForEach = function(fn){
for(var i = 0 , len = this.length ; i < len ; i++ ){
fn(this[i],i,this);
}
}
2.重写filter方法
代码如下(示例):
//重写filter
Array.prototype.myFilter = function(fn){
var result = [] ,
item;
for(var i = 0 , len = this.length ; i < len ; i++ ){
item = this[i];
if(fn(this[i],i,this)){
result.push(this[i]);
}
}
return result;
}
3.重写map方法
代码如下(示例):
Array.prototype.myMap = function(fn){
var result = [] ;
for(var i = 0 , len = this.length; i < len ; i++){
result.push(fn(this[i],i,this));
}
return result;
}
4.重写reduce方法
代码如下(示例):
Array.prototype.myReduce = function(fn,value){
var i = 0 ,
len = this.length;
if(value === undefined){
value = this[i];
i++;
}
for( ; i < len ; i++){
value = fn(value,this[i],i,this);
}
return value;
}
5.重写reduceRight方法
代码如下(示例):
Array.prototype.myReduceRight = function(fn,value){
var i = this.length - 1;
if(value === undefined){
value = this[i];
i--;
}
for( ; i >= 0 ; i--){
value = fn(value,this[i],i,this);
}
return value;
}
5.重写every方法
代码如下(示例):
Array.prototype.myEvery = function(fn){
for(var i = 0 , len = this.length ; i < len ; i++){
if(!fn(this[i],i,this)){
return false;
}
}
return true;
}
5.重写some方法
代码如下(示例):
Array.prototype.mySome = function(fn){
for(var i = 0 , len = this.length ; i < len ; i++){
if(fn(this[i],i,this)){
return true;
}
}
return false;
}
总结
提示:这里对文章进行总结:注意每个方法的返回结果!
如果对你有帮助的话,点个免费的赞呗!(≧∇≦)/