ES5数组方法详解,并重写

ES5数组方法详解,并重写

ES5新增了几个数组方法,但是ie8及以下不支持这些方法,于是就需要重写一个自己的方法来提高兼容性!

看重写的方法有助与理解哦!(。・ω・。)ノ♡



新增的数组方法

  1. forEach
  2. filter
  3. map
  4. reduce
  5. reduceRight
  6. every
  7. 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;
	 }

总结

提示:这里对文章进行总结:注意每个方法的返回结果!
如果对你有帮助的话,点个免费的赞呗!(≧∇≦)/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值