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 this关键字的问题
Jan 09 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
Jun 02 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
Aug 23 Javascript
鼠标移动到图片名上,显示图片的简单实例
Jul 14 Javascript
js 异步操作回调函数如何控制执行顺序
Dec 24 Javascript
JavaScript中的单引号和双引号报错的解决方法
Sep 01 Javascript
jQuery实现图片文字淡入淡出效果
Dec 21 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
Sep 18 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
Mar 01 Javascript
解决angular2 获取到的数据无法实时更新的问题
Aug 31 Javascript
微信小程序时间控件picker view使用详解
Dec 28 Javascript
微信小程序自定义底部弹出框动画
Nov 18 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环境无法上传文件的解决方法
2014/04/30 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
JavaScript中常见获取元素的方法汇总
2015/03/04 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
Python实现程序的单一实例用法分析
2015/06/03 Python
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
Python中常用信号signal类型实例
2018/01/25 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
如何基于Python创建目录文件夹
2019/12/31 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
葡萄牙语专业个人求职信
2013/12/10 职场文书
小学安全教育材料
2014/02/17 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
新党章的学习心得体会
2014/11/07 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书
Golang中interface{}转为数组的操作
2021/04/30 Golang
Python实现简繁体转换
2021/06/07 Python
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android