JS中reduce怎么用
发表于:2025-02-12 作者:千家信息网编辑
千家信息网最后更新 2025年02月12日,这篇文章给大家分享的是有关JS中reduce怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。reduce方法是一个数组的迭代方法,和map、filter不同,reduc
千家信息网最后更新 2025年02月12日JS中reduce怎么用
这篇文章给大家分享的是有关JS中reduce怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
reduce
方法是一个数组的迭代方法,和map
、filter
不同,reduce
方法可缓存一个变量,迭代时我们可以操作这个变量,然后返回它。
这是我大白话的解释,可能还是不容易理解,下面看例子吧
1. 数组累加
数组累加是项目经常遇到的,比如计算商品总价等,使用reduce
就可以一行代码搞定,而且不用定义外部变量,reduce是完全无副作用的函数。
// 累加[1, 2, 3, 4, 5, 6, 7, 8].reduce((a, i) => a + i);// 输出:36// 累加,默认一个初始值[1, 2, 3, 4, 5, 6, 7, 8].reduce((a, i) => a + i, 5);// 输出:41// 累乘[1, 2, 3, 4, 5, 6, 7, 8].reduce((a, i) => a * i);// 输出:40320
2. 找出数组最大值
在数组每次的迭代中,我们使用Math.max
获取最大值并返回,最后我们将得到数组所有项目的最大值。
[1, 2, 3, 4, 5, 6, 7, 8].reduce((a, i) => Math.max(a, i));
当然如果数组每项都是数字我们可以使用...展开运算符和Math.max
配合。
Math.max(...[1, 2, 3, 4, 5, 6, 7, 8]);
3. 处理不规则数组
通过map
和reduce
配合使用,返回每个子数组拼接好的结果。
let data = [ ["红色","128g", "苹果手机"], ["南北","两室一厅","128㎡","洋房住宅"], ["小米","白色","智能运动手表","心率血压血氧","来电信息提醒"], ["官方发售","2020年秋季","篮球","球鞋","品牌直邮"]]let dataConcat = data.map(item=>item.reduce((a,i)=>`${a} ${i}`))// 输出结果:["红色 128g 苹果手机""南北 两室一厅 128㎡ 洋房住宅""小米 白色 智能运动手表 心率血压血氧 来电信息提醒""官方发售 2020年秋季 篮球 球鞋 品牌直邮"]
4. 删除数据重复项
检查当前迭代项是否存在,如果不存在添加到数组中。
let array = [1, 2, 3, 'a', 'b', 'c', 1, 2, 3, 'a', 'b', 'c'];array.reduce((noDupes, curVal) => { if (noDupes.indexOf(curVal) === -1) { noDupes.push(curVal) } return noDupes}, [])// 输出:[1, 2, 3, 'a', 'b', 'c']
5. 验证括号是否合法
这是一个很巧妙的用法,我在dev.to上看到的用法。如果结果等于0说明,括号数量是合法的。
[..."(())()(()())"].reduce((a,i)=> i === '(' ? a+1 : a-1 , 0);// 输出:0// 使用循环方式let status=0for (let i of [..."(())()(()())"]) { if(i === "(") status = status + 1 else if(i === ")") status = status - 1 if (status < 0) { break; }}
6. 按属性分组
按照指定key将数据进行分组,这里我用国家字段分组,在每次迭代过程中检查当前国家是否存在,如果不存在创建一个数组,将数据插入到数组中。并返回数组。
let obj = [ {name: '张三', job: '数据分析师', country: '中国'}, {name: '艾斯', job: '科学家', country: '中国'}, {name: '雷尔', job: '科学家', country: '美国'}, {name: '鲍勃', job: '软件工程师', country: '印度'},]obj.reduce((group, curP) => { let newkey = curP['country'] if(!group[newkey]){ group[newkey]=[] } group[newkey].push(curP) return group}, [])// 输出:[ 中国: [{…}, {…}] 印度: [{…}] 美国: [{…}] ]
7. 数组扁平化
这里展示的数组只有一级深度,如果数组是多级可以使用递归来进行处理
[[3, 4, 5], [2, 5, 3], [4, 5, 6]].reduce((singleArr, nextArray) => singleArr.concat(nextArray), [])// 输出:[3, 4, 5, 2, 5, 3, 4, 5, 6]
当然也可以使用ES6的.flat方法替代
[ [3, 4, 5], [2, 5, 3], [4, 5, 6]].flat();
8. 反转字符串
这也是一种很奇妙的实现方法
[..."hello world"].reduce((a,v) => v+a)
或者
[..."hello world"].reverse().join('')
感谢各位的阅读!关于"JS中reduce怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
数组
输出
方法
迭代
数据
最大
变量
最大值
结果
中国
分组
合法
住宅
内容
南北
品牌
国家
官方
小米
心率
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
利通区科技型网站服务器
服务器运行程序自动出现多个线程
seo软件开发教程
江西gps时间频率同步服务器
frm数据库
数通网络技术服务工程师
网站软件开发人员工资待遇
网络安全专业英语缩写
农村网络技术培训
盐城联想服务器厂商
php 备份数据库
网络安全主题班会PPT一年级
web应用软件开发比赛有奖金嘛
服务器上面安装什么系统软件
区块链网络技术创新发展
绝地求生刺激战场服务器设置
军队网络安全意识讨论交流
湖北web前端软件开发定制费用
浙江常规软件开发代理品牌
软件开发毕业设计 bs
win7服务器管理器 没有
服务器运维维保项目合同pdf
创建数据库的脚本
龙华区网络技术进出口优点
网络安全网评文章
郑州尚微网络技术有限公司
性价比最高的服务器是
学费数据库设计有多少钱的工资
查看服务器的ip
网络安全建设项目会用到哪些东西