JavaScript中reduce()方法的使用详解


Posted in Javascript onJune 09, 2015

 JavaScript 数组reduce()方法同时应用一个函数针对数组的两个值(从左到右),以减至一个值。
语法

array.reduce(callback[, initialValue]);

下面是参数的详细信息:

  •     callback : 函数执行在数组中每个值
  •     initialValue : 对象作为第一个参数回调的第一次调用使用

返回值:

返回数组的减少单一个值
兼容性

这种方法是一个JavaScript扩展到ECMA-262标准; 因此它可能不存在在标准的其他实现。为了使它工作,你需要添加下面的脚本代码的顶部:

if (!Array.prototype.reduce)
{
 Array.prototype.reduce = function(fun /*, initial*/)
 {
  var len = this.length;
  if (typeof fun != "function")
   throw new TypeError();

  // no value to return if no initial value and an empty array
  if (len == 0 && arguments.length == 1)
   throw new TypeError();

  var i = 0;
  if (arguments.length >= 2)
  {
   var rv = arguments[1];
  }
  else
  {
   do
   {
    if (i in this)
    {
     rv = this[i++];
     break;
    }

    // if array contains no values, no initial value to return
    if (++i >= len)
     throw new TypeError();
   }
   while (true);
  }

  for (; i < len; i++)
  {
   if (i in this)
    rv = fun.call(null, rv, this[i], i, this);
  }

  return rv;
 };
}

例子:

<html>
<head>
<title>JavaScript Array reduce Method</title>
</head>
<body>
<script type="text/javascript">
if (!Array.prototype.reduce)
{
 Array.prototype.reduce = function(fun /*, initial*/)
 {
  var len = this.length;
  if (typeof fun != "function")
   throw new TypeError();

  // no value to return if no initial value and an empty array
  if (len == 0 && arguments.length == 1)
   throw new TypeError();

  var i = 0;
  if (arguments.length >= 2)
  {
   var rv = arguments[1];
  }
  else
  {
   do
   {
    if (i in this)
    {
     rv = this[i++];
     break;
    }

    // if array contains no values, no initial value to return
    if (++i >= len)
     throw new TypeError();
   }
   while (true);
  }

  for (; i < len; i++)
  {
   if (i in this)
    rv = fun.call(null, rv, this[i], i, this);
  }

  return rv;
 };
}

var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; });
document.write("total is : " + total ); 
</script>
</body>
</html>

这将产生以下结果:

total is : 6
Javascript 相关文章推荐
jQuery动态添加的元素绑定事件处理函数代码
Aug 02 Javascript
js 获取计算后的样式写法及注意事项
Feb 25 Javascript
jquery增加时编辑jqGrid(实例代码)
Nov 08 Javascript
javascript 函数及作用域总结介绍
Nov 12 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
Jan 28 Javascript
JavaScript数组合并的多种方法
May 22 Javascript
JavaScript对Json的增删改属性详解
Jun 02 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
Dec 07 Javascript
React中常见的动画实现的几种方式
Jan 10 Javascript
JS中的BOM应用
Feb 02 Javascript
Node.js使用MySQL连接池的方法实例
Feb 11 Javascript
Electron 如何调用本地模块的方法
Feb 01 Javascript
简介JavaScript中的push()方法的使用
Jun 09 #Javascript
JavaScript中pop()方法的使用教程
Jun 09 #Javascript
在JavaScript中操作数组之map()方法的使用
Jun 09 #Javascript
JavaScript中join()方法的使用简介
Jun 09 #Javascript
Jquery日期选择datepicker插件用法实例分析
Jun 08 #Javascript
Jquery实现遮罩层的方法
Jun 08 #Javascript
js正则匹配出所有图片及图片地址src的方法
Jun 08 #Javascript
You might like
php连接mysql数据库代码
2009/03/10 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
开启PHP的伪静态模式
2015/12/31 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
php 数组元素快速去重
2017/05/05 PHP
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
在点击div中的p时,如何阻止事件冒泡
2017/02/07 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
python3.7简单的爬虫实例详解
2019/07/08 Python
用django设置session过期时间的方法解析
2019/08/05 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
python批量修改xml属性的实现方式
2020/03/05 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
日语翻译个人求职的自我评价
2013/10/14 职场文书
智能电子应届生求职信
2013/11/10 职场文书
九年级科学教学反思
2014/01/29 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
文明单位创建材料
2014/12/24 职场文书
语文教师求职信范文
2015/03/20 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python