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 相关文章推荐
QQ邮箱的一个文本编辑器代码
Mar 14 Javascript
AJAX的跨域与JSONP(为文章自动添加短址的功能)
Jan 17 Javascript
js实现选中复选框文字变色的方法
Aug 14 Javascript
node.js+express制作网页计算器
Jan 17 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
Jan 22 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
Apr 06 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
Sep 25 Javascript
JavaScript制作弹出层效果
Dec 02 Javascript
用jQuery实现圆点图片轮播效果
Mar 19 Javascript
Vue2.0 UI框架ElementUI使用方法详解
Apr 14 Javascript
原生JS实现Ajax跨域请求flask响应内容
Oct 24 Javascript
vue实现简单计算商品价格
Sep 14 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 zend解密软件绿色版测试可用
2008/04/14 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
用jscript启动sqlserver
2007/06/21 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
JS原型对象通俗&quot;唱法&quot;
2012/12/27 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
微信小程序实现简单购物车功能
2020/12/30 Javascript
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
Python装饰器知识点补充
2018/05/28 Python
python实现电子书翻页小程序
2019/07/23 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
财务部岗位职责
2013/11/19 职场文书
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
科技活动总结范文
2015/05/11 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
2019最新劳动仲裁申请书!
2019/07/08 职场文书
详解Vue的sync修饰符
2021/05/15 Vue.js
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS