JS数组reduce()方法原理及使用技巧解析


Posted in Javascript onJuly 14, 2020

1、语法

arr.reduce(callback,[initialValue])

reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。

callback (执行数组中每个值的函数,包含四个参数)

1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))

2、currentValue (数组中当前被处理的元素)

3、index (当前元素在数组中的索引)

4、array (调用 reduce 的数组)

initialValue (作为第一次调用 callback 的第一个参数。)如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。

2、reduce的简单用法

var arr = [1, 2, 3, 4];
var sum = arr.reduce((x,y)=>x+y)
var mul = arr.reduce((x,y)=>x*y)
console.log( sum ); //求和,10
console.log( mul ); //求乘积,24

1) 计算数组中每个元素出现的次数

let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];

let nameNum = names.reduce((pre,cur)=>{
 if(cur in pre){
  pre[cur]++
 }else{
  pre[cur] = 1 
 }
 return pre
},{})
console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}

2)数组去重

let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
  if(!pre.includes(cur)){
   return pre.concat(cur)
  }else{
   return pre
  }
},[])
console.log(newArr);// [1, 2, 3, 4]

3)将二维数组转化为一维

let arr = [[0, 1], [2, 3], [4, 5]]
let newArr = arr.reduce((pre,cur)=>{
  return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]

4)将多维数组转化为一维

let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
const newArr = function(arr){
  return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
}
console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

5)对象里的属性求和

var result = [
  {
    subject: 'math',
    score: 10
  },
  {
    subject: 'chinese',
    score: 20
  },
  {
    subject: 'english',
    score: 30
  }
];

var sum = result.reduce(function(prev, cur) {
  return cur.score + prev;
}, 0);
console.log(sum) //60

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
40款非常有用的 jQuery 插件推荐(系列一)
Dec 21 Javascript
JS限制文本框只能输入数字和字母方法
Feb 28 Javascript
jQuery检测鼠标左键和右键点击的方法
Mar 17 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
Apr 20 Javascript
jquery.qtip提示信息插件用法简单实例
Jun 17 Javascript
详解Vue.js入门环境搭建
Mar 17 Javascript
JS简单判断滚动条的滚动方向实现方法
Apr 28 Javascript
带你快速理解javascript中的事件模型
Aug 14 Javascript
js正则相关知识点专题
May 10 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
May 10 Javascript
vue-socket.io接收不到数据问题的解决方法
May 13 Javascript
在elementui中Notification组件添加点击事件实例
Nov 11 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
Jul 14 #Javascript
详解javascript void(0)
Jul 13 #Javascript
Vue组件间数据传递的方式(3种)
Jul 13 #Javascript
vue-cli4项目开启eslint保存时自动格式问题
Jul 13 #Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
Jul 13 #Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
Jul 13 #Javascript
Vue3新特性之在Composition API中使用CSS Modules
Jul 13 #Javascript
You might like
简单的PHP缓存设计实现代码
2011/09/30 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
复制粘贴功能的Python程序
2008/04/04 Python
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python中threading模块join函数用法实例分析
2015/06/04 Python
Python函数式编程指南(四):生成器详解
2015/06/24 Python
Python的Django框架中的数据库配置指南
2015/07/17 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
numpy中三维数组中加入元素后的位置详解
2019/11/28 Python
Python二元算术运算常用方法解析
2020/09/15 Python
Internal修饰符有什么含义
2013/07/10 面试题
毕业生个人的求职信范文
2013/12/03 职场文书
党校培训思想汇报
2013/12/30 职场文书
升职演讲稿范文
2014/05/23 职场文书
会计岗位说明书
2014/07/29 职场文书
教师党的群众路线学习心得体会
2014/11/04 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
PHP新手指南
2021/04/01 PHP
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android