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文件的三种方法
Nov 08 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
Mar 27 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
Apr 07 Javascript
javascript基本包装类型介绍
Apr 10 Javascript
JS实现的仿淘宝交易倒计时效果
Nov 27 Javascript
XML、HTML、CSS与JS的区别整理
Feb 18 Javascript
js阻止浏览器默认行为的简单实例
May 15 Javascript
初识简单却不失优雅的Vue.js
Sep 12 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
May 08 Javascript
详解js location.href和window.open的几种用法和区别
Dec 02 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
Mar 05 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
Jul 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
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
vue自定义filters过滤器
2018/04/26 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
Python base64编码解码实例
2015/06/21 Python
使用C++扩展Python的功能详解
2018/01/12 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
Python子类继承父类构造函数详解
2019/02/19 Python
Python多项式回归的实现方法
2019/03/11 Python
Python中format()格式输出全解
2019/04/12 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
Python Subprocess模块原理及实例
2019/08/26 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
高中学生评语大全
2014/04/25 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
本地通过nginx配置反向代理的全过程记录
2021/03/31 Servers
MySQL 使用索引扫描进行排序
2021/06/20 MySQL