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 相关文章推荐
IE6/7/8/9不支持exec的简写方式
May 25 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
Sep 12 Javascript
JavaScript中用let语句声明作用域的用法讲解
May 20 Javascript
JS遍历页面所有对象属性及实现方法
Aug 01 Javascript
js闭包用法实例详解
Dec 13 Javascript
js实现获取鼠标当前的位置
Dec 14 Javascript
js+html5实现页面可刷新的倒计时效果
Jul 15 Javascript
jQuery模拟爆炸倒计时功能实例代码
Aug 21 jQuery
详解Node.js利用node-git-server快速搭建git服务器
Sep 27 Javascript
浅谈如何通过node.js对数据进行MD5加密
May 16 Javascript
Weex开发之地图篇的具体使用
Oct 16 Javascript
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 Vue.js
微信小程序实现分享朋友圈的图片功能示例
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提示undefined index的几种解决方法
2012/05/21 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
Redis构建分布式锁
2017/03/28 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
JavaScript学习笔记--常用的互动方法
2016/12/07 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
layui数据表格重载实现往后台传参
2019/11/15 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
Python探索之SocketServer详解
2017/10/28 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
Python3实现英文字母转换哥特式字体实例代码
2020/09/01 Python
值传递还是引用传递
2015/02/08 面试题
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书