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 相关文章推荐
JavaScript 监听textarea中按键事件
Oct 08 Javascript
JavaScrip单线程引擎工作原理分析
Sep 04 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
Nov 19 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
Sep 01 Javascript
Bootstrap如何创建表单
Oct 21 Javascript
JS常用算法实现代码
Nov 14 Javascript
微信小程序 欢迎页面的制作(源码下载)
Jan 09 Javascript
小程序实现展开/收起的效果示例
Sep 22 Javascript
webpack4.x CommonJS模块化浅析
Nov 09 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
Jun 05 Javascript
JS使用正则表达式判断输入框失去焦点事件
Oct 16 Javascript
原生js实现文件上传、下载、封装等实例方法
Jan 05 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 进程锁定问题分析研究
2009/11/24 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
javascript几个易错点记录
2014/11/26 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
详解Vue 如何监听Array的变化
2019/06/06 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
python实现字符串和字典的转换
2018/09/29 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
使用pip安装python库的多种方式
2019/07/31 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
机械制造与自动化应届生求职信
2013/11/16 职场文书
生日礼品店创业计划书范文
2014/03/21 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
委托证明模板
2014/09/16 职场文书
致运动员的广播稿
2015/08/19 职场文书
2016年离婚协议书范文
2016/03/18 职场文书
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript
【海涛七七解说】DCG第二周:DK VS 天禄
2022/04/01 DOTA
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
MSSQL基本语法操作
2022/04/11 SQL Server
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技