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 相关文章推荐
爆炸式的JS圆形浮动菜单特效代码
Mar 03 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
Dec 15 Javascript
Extjs4 类的定义和扩展实例
Jun 28 Javascript
JS取request值以及自动执行使用示例
Feb 24 Javascript
node.js中的fs.symlinkSync方法使用说明
Dec 15 Javascript
BootStrap导航栏问题记录
Jul 31 Javascript
写给vue新手们的vue渲染页面教程
Sep 01 Javascript
jQuery实现的电子时钟效果完整示例
Apr 28 jQuery
Angular5中调用第三方库及jQuery的添加的方法
Jun 07 jQuery
微信小程序实现发红包功能
Jul 11 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
Sep 27 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
Aug 28 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与XML的PDF文档生成技术
2006/10/09 PHP
如何删除多级目录
2006/10/09 PHP
php获取后台Job管理的实现代码
2011/06/10 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
jquery.validate分组验证代码
2011/03/17 Javascript
初识Node.js
2015/03/20 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
如何在Angular.JS中接收并下载PDF
2016/11/26 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
用Python进行基础的函数式编程的教程
2015/03/31 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
Python中static相关知识小结
2018/01/02 Python
pandas删除指定行详解
2019/04/04 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
英国天然保健品网站:Simply Supplements
2017/03/22 全球购物
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
超市营业员求职简历的自我评价
2013/10/17 职场文书
商场主管竞聘书
2014/03/31 职场文书
运动会加油口号
2014/06/07 职场文书
产品调价通知函
2015/04/20 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书