ES5 中的Array.prototype.reduce( )方法

fn: callback
initial: 初始值
Array.prototype.reduce(fn , initial)

用法举例:

var a = [1, 2, 3];
a.reduce(function (x , y) { return x + y}, 1); // 7

这个reduce( )可以用来实现用指定的函数对数组元素进行组合。可以设置初始值,不设置的话默认的会选择数组中的第一个元素作为初始值

这个方法针对IE < 9 的浏览器 的写一个兼容的方法,英文称作 Polyfill , 填充物

var reduce =  Array.prototype.reduce          // 判断浏览器是否支持 ES5 中的 reduce() 方法
              ?  function(a, fn, initial) {   // 支持的话 执行这段代码
                         if( arguments.length > 2) { 
                                   return a.reduce(fn, initial);              
                         }  else {
                                   return a.reduce(fn);      
                         }  
             }
             :   function(a, fn, initial) {   //不支持的话执行以下代码
                 var i = 0, len = a.length, sum;
                        if(arguments > 2) {   
                        
                               //传了初始值 初始化 sum 值
                               sum = initial; 
                              
                        } else {  
                               //没有传递初始值  
                              
                              //如果传递的是空数组直接抛出错误信息
                              
                        if (a.len == 0)  return new TypeError( a + 'can not be a empty array');
                                 
                              while( i < len) {
                              
                                //  为了防止出现这种现象
                                //  var  arr = [1, 2, 3]; delete arr[0];  
                                //  这样的话原数组  会变为  [1: 2, 2: 3]
                                if ( i in a) {
                                
                                sum = a[i++]};  
                                break;
                                }
                             //为了防止出项
                             //var arr = [1, 2, 3];
                             //delete arr[0];
                             //delete arr[1];
                             //delete arr[3];
                             //console.log(arr.length);  *虽然数组为空 但是length值 仍然是 3*
                             if ( i == len) throw TypeError(a +'can not be a empty array'); 
                        }
                        
                        while( i < len) {
                              if( i in a) { sum = fn.call(undefinde, sum, a[i], i, a); }                              
                              i++;
                        }
                        return sum;
             }
代码中的`a[i++]` 是先为 `sum`  赋值为 `a[i]`  然后为`i = i + 1`; 
`a[i++]` 可以理解为 不设置的话默认的会选择数组中的第一个元素作为初始值

领个红包,小赞赏一下吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值