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 相关文章推荐
Javascript 类、命名空间、代码组织代码
Jul 31 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
Jan 06 Javascript
单击和双击事件的冲突处理示例代码
Apr 03 Javascript
原生javascript实现解析XML文档与字符串
Mar 01 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
Jul 01 Javascript
BootStrap table使用方法分析
Nov 08 Javascript
JS DOMReady事件的六种实现方法总结
Nov 23 Javascript
Vue2.x中的父子组件相互通信的实现方法
May 02 Javascript
微信小程序 生命周期函数详解
May 24 Javascript
使用js获取伪元素的content实例
Oct 24 Javascript
ajax请求data遇到的问题分析
Jan 18 Javascript
JSON字符串操作移除空串更改key/value的介绍
Jan 05 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
javascript 计算两个整数的百分比值
2009/12/26 Javascript
javascript 二分法(数组array)
2010/04/24 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python学习必备知识汇总
2017/09/08 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
TensorFlow的权值更新方法
2018/06/14 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
用python对excel查重
2020/12/07 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
最新自我评价范文
2013/11/16 职场文书
简短证婚人证婚词
2014/01/09 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
创新型城市实施方案
2014/03/06 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
出租车拒载检讨书
2015/01/28 职场文书
毕业设计致谢词
2015/05/14 职场文书
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers