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 相关文章推荐
return false;和e.preventDefault();的区别
Jul 11 Javascript
ToolTips JQEURY插件之简洁小提示框效果
Nov 19 Javascript
随窗体滑动的小插件sticky源码
Jun 21 Javascript
jquery滚动条插件jScrollPane的使用介绍
Nov 08 Javascript
使用ajaxfileupload.js实现上传文件功能
Aug 13 Javascript
jquery.multiselect多选下拉框实现代码
Nov 11 Javascript
使用jQuery操作DOM的方法小结
Feb 27 Javascript
js实现一键复制功能
Mar 16 Javascript
浅谈Vue.js组件(二)
Apr 09 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
Sep 21 Javascript
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
解决vue2中使用elementUi打包报错的问题
Sep 22 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
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
php中and 和 &amp;&amp;出坑指南
2018/07/13 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
python实现bitmap数据结构详解
2014/02/17 Python
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
浅谈python标准库--functools.partial
2019/03/13 Python
python logging添加filter教程
2019/12/24 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
本科生求职简历的自我评价
2013/10/21 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
通知格式
2015/04/27 职场文书
电工实训心得体会
2016/01/14 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript