js中的reduce()函数讲解


Posted in Javascript onJanuary 18, 2019

定义:

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。对空数组是不会执行回调函数的。

js中的reduce()函数讲解

案例

1.数组求和

// 1.数组求和
  var arr = [1,5,8,6,15,78,65,25,48,55]
  var sum = arr.reduce(function(total,currentValue){
    return total+currentValue;
  });
  console.log(sum);//306
  var eachSum = 0;
  arr.forEach(function(currentValue){
    eachSum += currentValue;
  })
  console.log(eachSum);//306

2.合并二维数组

//2.合并二维数组
  var twoArr = [['mu','zi'],['dig','big'],['lucky','jiji']];
  var oneArr = twoArr.reduce(function(total,currentValue){
    // console.log(total)
    return total.concat(currentValue);
  })
  console.log(oneArr);//["mu", "zi", "dig", "big", "lucky", "jiji"]

3.统计一个数组中有多少个不重复的单词:

//3.统计一个数组中有多少个不重复的单词:
  // 不用reduce时: 
  var arr = ["apple","orange","apple","orange","pear","orange"]; 
  function getWordCnt(){ 
    var obj = {}; 
    for(var i= 0, l = arr.length; i< l; i++){ 
      var item = arr[i]; 
      obj[item] = (obj[item] +1 ) || 1; 
    } 
    return obj; 
  }
  console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1}
  // 用reduce时: 
  var arr = ["apple","orange","apple","orange","pear","orange"]; 
  function getWordCnt(){ 
    return arr.reduce(function(prev,next){ 
      prev[next] = (prev[next] + 1) || 1; 
      return prev; 
    },{}); 
  } 
  console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1}

4.对reduce的理解:

reduce(callback,initiaValue)会传入两个变量,回调函数(callback)和初始值(initiaValue)。

假设函数有个传入参数,prev和next,index和array。 Prev和next是你必须要了解的。

当没有传入初始值时,prev是从数组中第一个元素开始的,next是第二个函数。

但是当传入初始值(initiaValue)后,第一个prev将是initivalValue,next将是数组中的第一个元素。

比如:

// 4.对reduce的理解:
  var arr = ["apple","orange"]; 
  function noPassValue(){ 
    return arr.reduce(function(prev,next){ 
      console.log("prev:",prev); 
      console.log("next:",next); 
      return prev; 
    }); 
  } 
  function passValue(){ 
    return arr.reduce(function(prev,next){ 
      console.log("prev:",prev); 
      console.log("next:",next); 
      prev[next] = 1; 
      return prev; 
    },{});
  } 
  console.log("No Additional parameter:",noPassValue()); 
  console.log("----------------"); 
  console.log("With {} as an additional parameter:",passValue()); 
  /*
  VM415673:4 prev: apple 
  VM415673:5 next: orange 
  VM415673:4 prev: apple 
  VM415673:5 next: orange 
  VM415673:19 No Additional parameter: apple 
  VM415673:20 ---------------- 
  VM415673:13 prev: {} 
  VM415673:14 next: apple 
  VM415673:13 prev: {apple: 1} 
  VM415673:14 next: orange 
  VM415673:21 With {} as an additional parameter: {apple: 1, orange: 1}
  */

若有不足请多多指教!希望给您带来帮助!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Javascript 相关文章推荐
jquery创建div 实现代码
Apr 27 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
Apr 07 Javascript
Javascript动态绑定事件的简单实现代码
Dec 25 Javascript
javascript学习笔记(九) js对象 设计模式
Jun 19 Javascript
jquery命令汇总,方便使用jquery的朋友
Jun 26 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
Apr 24 Javascript
js函数返回多个返回值的示例代码
Nov 05 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
Dec 31 Javascript
轻松实现javascript图片轮播特效
Jan 13 Javascript
jQuery实现鼠标选文字发新浪微博的方法
Apr 02 Javascript
用js屏蔽被http劫持的浮动广告实现方法
Aug 10 Javascript
vue使用laydate时间插件的方法
Nov 14 Javascript
微信小程序实现分享朋友圈的图片功能示例
Jan 18 #Javascript
vue-cli3 karma单元测试的实现
Jan 18 #Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
Jan 18 #Javascript
如何解决.vue文件url引用文件的问题
Jan 18 #Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
Jan 18 #jQuery
vue.js实现的幻灯片功能示例
Jan 18 #Javascript
vue ssr 实现方式(学习笔记)
Jan 18 #Javascript
You might like
一步一步学习PHP(3) php 函数
2010/02/15 PHP
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
php的debug相关函数用法示例
2016/07/11 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
JS+canvas绘制的动态机械表动画效果
2017/09/12 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
2020/12/30 Vue.js
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
django框架模板语言使用方法详解
2019/07/18 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
tensorflow的计算图总结
2020/01/12 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
为什么使用接口?
2014/08/13 面试题
销售自荐信
2013/10/22 职场文书
医学类导师推荐信范文
2013/11/19 职场文书
自我评价个人范文
2013/12/16 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
2014年林业工作总结
2014/12/05 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书