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 相关文章推荐
cookie的复制与使用记住用户名实现代码
Nov 04 Javascript
用户代理字符串userAgent可实现的四个识别
Sep 20 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
Oct 26 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
May 16 Javascript
js中通过getElementsByName访问name集合对象的方法
Oct 31 Javascript
jQuery事件绑定方法学习总结(推荐)
Nov 21 Javascript
详解wepy开发小程序踩过的坑(小结)
May 22 Javascript
一看就会的vuex实现登录验证(附案例)
Jan 09 Javascript
Element PageHeader页头的使用方法
Jul 26 Javascript
JavaScript Array.flat()函数用法解析
Sep 02 Javascript
vue3.0 数字翻牌组件的使用方法详解
Apr 20 Vue.js
vue el-table实现递归嵌套的示例代码
Aug 14 Vue.js
微信小程序连接服务器展示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实现WEB动态网页静态
2006/10/09 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
JavaScript this调用规则说明
2010/03/08 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
理解Python中函数的参数
2015/04/27 Python
python实现将内容分行输出
2015/11/05 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
小学教师学期末自我评价
2013/09/25 职场文书
家长给孩子的评语
2014/01/30 职场文书
模具专业自荐信
2014/05/29 职场文书
医德医风自我评价
2014/09/19 职场文书
婚内房产协议书范本
2014/10/02 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
2015最新民情日记范文
2015/06/26 职场文书
运动会宣传稿50字
2015/07/23 职场文书
安全教育日主题班会
2015/08/13 职场文书
改进工作作风心得体会
2016/01/23 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python