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 相关文章推荐
javascript AutoScroller 函数类
May 29 Javascript
Firefox outerHTML实现代码
Jun 04 Javascript
js 表格隔行颜色
Dec 02 Javascript
JavaScript Event学习第三章 早期的事件处理程序
Feb 07 Javascript
关于JAVASCRIPT urldecode URL解码的问题
Jan 08 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
Oct 26 Javascript
JavaScript中将数组进行合并的基本方法讲解
Mar 07 Javascript
微信小程序开发一键登录 获取session_key和openid实例
Nov 23 Javascript
浅析JavaScript中var that=this
Feb 17 Javascript
浏览器调试动态js脚本的方法(图解)
Jan 19 Javascript
angular6的table组件开发的实现示例
Dec 26 Javascript
js删除对象中的某一个字段的方法实现
Jan 11 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
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
php zend 相对路径问题
2009/01/12 PHP
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
Javascript 二维数组
2009/11/26 Javascript
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
微信小程序中单位rpx和rem的使用
2016/12/06 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
node中IO以及定时器优先级详解
2019/05/10 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
Django实现学员管理系统
2019/02/26 Python
pycharm的python_stubs问题
2020/04/08 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
Linux操作面试题
2015/02/11 面试题
可口可乐广告词
2014/03/20 职场文书
成绩单家长评语大全
2014/04/16 职场文书
男女朋友协议书
2014/04/23 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL