当前位置: 首页 > news >正文

前端小技巧: 数组reduce方法的五种常见用途

数组的 reduce

  • reduce 为数组的归并方法,用于遍历数组且进行归并
  • 接收2个参数,callback方法和初始值(选填)
  • 当传入初始值时,从初始值开始归并且从数组第0项开始遍历
  • 当没有初始值时,用数组的第0项作为初始值,且数组从第一项开始归并
  • 回调函数接收2个参数,一个是缓存值 pre,一个是当前值 cur
  • reduce 方法的核心在于这个pre参数,允许在遍历过程中缓存 pre 变量
  • 因为有了这个缓存值,可以解决非常多的问题

1 )累加操作

const result = [1,2,3].reduce((prev, cur) => prev + cur);
console.log(result); // 6

2 )找最大值

const result = [1,2,2,880,22,245666, 1000].reduce((prev, cur) => Math.max(prev,cur));
console.log(result) // 245666

3 )去重

const result = [1,33,22,22,333,1,1,33,22].reduce((prev, cur) => {if (prev.includes(cur)) {return prev;}prev.push(cur);return prev;
},[])
console.log(result); // [1, 33, 22, 333]

4 )反转字符串

const result = Array.from('hello Joh').reduce((prev, cur) => {return `${cur}${prev}`
}, '')
console.log(result); // hoJ olleh

5 )归类

const result = [{name: 1, c: 'c'},{name: 3, c: 'c'},{name: 2, c: 'd'},{name: 3, c: 'd'},{name: 8, c: 'e'},{name: 1, c: 'e'}
].reduce((prev, cur)=>{if (!prev[cur.c]) {prev[cur.c] = []}prev[cur.c].push(cur)return prev
}, {})
console.log(result);/*
{"c": [{"name": 1,"c": "c"},{"name": 3,"c": "c"}],"d": [{"name": 2,"c": "d"},{"name": 3,"c": "d"}],"e": [{"name": 8,"c": "e"},{"name": 1,"c": "e"}]
}
*/

相关文章:

  • 矢量图形编辑软件Boxy SVG mac中文版软件特点
  • Python制作国旗头像
  • 深度学习之pytorch第一课
  • 烟草5G智慧工厂数字孪生可视化平台,赋能烟草工业数字化智慧转型
  • 30基于Feign远程调用
  • golang工程组件——redigo使用(redis协议,基本命令,管道,事务,发布订阅,stream)
  • Spring-AOP不生效之内部方法调用
  • 【Android】画面卡顿优化列表流畅度一
  • uboot - 驱动开发 - dw watchdog
  • 无梯度强化学习:使用遗传算法进化代理
  • 【服务配置文件详解】补充rsyslog服务的配置文件翻译解读
  • 【hcie-cloud】【5】华为云Stack规划设计之华为云Stack标准化配置、缩略语【下】
  • 前端Vue 结合xlxs库实现解析excel文件,并动态组装表头!
  • CMakeFiles文件夹有什么用
  • Xmake v2.8.5 发布,支持链接排序和单元测试
  • 【Leetcode】101. 对称二叉树
  • C++11: atomic 头文件
  • const let
  • ERLANG 网工修炼笔记 ---- UDP
  • IOS评论框不贴底(ios12新bug)
  • Javascript Math对象和Date对象常用方法详解
  • nginx 负载服务器优化
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 网络应用优化——时延与带宽
  • 我的业余项目总结
  • 由插件封装引出的一丢丢思考
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​水经微图Web1.5.0版即将上线
  • (¥1011)-(一千零一拾一元整)输出
  • (1)虚拟机的安装与使用,linux系统安装
  • (12)Hive调优——count distinct去重优化
  • (5)STL算法之复制
  • (C语言)fread与fwrite详解
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二)Linux——Linux常用指令
  • (接口自动化)Python3操作MySQL数据库
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)基于IDEA的JAVA基础12
  • (转) Android中ViewStub组件使用
  • (转)setTimeout 和 setInterval 的区别
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .FileZilla的使用和主动模式被动模式介绍
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net 8.0 新的变化
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .netcore如何运行环境安装到Linux服务器
  • .NET正则基础之——正则委托
  • .net中调用windows performance记录性能信息