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 相关文章推荐
获取dom元素那些讨厌的位置封装代码
Jun 23 Javascript
js实现三张图(文)片一起切换的banner焦点图
Aug 25 Javascript
详解JavaScript函数对象
Nov 15 Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
Jul 04 Javascript
bootstrap flask登录页面编写实例
Nov 01 Javascript
js仿微博动态栏功能
Feb 22 Javascript
jQuery Ajax前后端使用JSON进行交互示例
Mar 17 Javascript
ES6新特性之字符串的扩展实例分析
Apr 01 Javascript
Angular 2.0+ 的数据绑定的实现示例
Aug 09 Javascript
vue实现前进刷新后退不刷新效果
Jan 26 Javascript
vscode 调试 node.js的方法步骤
Sep 15 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公用函数列表[正则]
2007/02/22 PHP
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
微信中一些常用的js方法汇总
2015/03/12 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
详解python实现线程安全的单例模式
2018/03/05 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
EJB timer的种类
2014/10/28 面试题
数据保密承诺书
2014/06/03 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书