Javascript面试经典套路reduce函数查重

发布时间 - 2026-01-11 00:19:46    点击率:

今天在偶然间查看到了一段代码,代码使用了很短的篇幅完成了字符串统计相同字符次数这个经典面试题,其中用到了reduce这个方法,网上查了查,没有查到什么有价值的东西,导致浪费了我一些时间才看懂,现将我的思路整理如下:

原代码:

var arr="qweqrq"
var info= arr.split('').reduce((a,b)=>
 (a[b]++ || (a[b]=1),a)
,{})
console.log(info)

代码思路是这样的,先将字符串arr通过split方法切割成数组,然后使用reduce,这个方法干了什么呢,分为这几步:

1.首先reduce会接收一个callback来对数组里的每一个元素执行,如果有第二个参数如上例:{}。,那么callback将会使用这个{}作为参数来和数组中的第一个元素一同传入callback;

2.传入参数之后,会进行一个与门短路操作,也可以叫默认值操作,当a[b]++成真,则返回a[b]。而这里的a为{},b为"q",很明显a中并没有b,执行a[b]=1,那么就会给a[b]赋值为1,后面是一个逗号表达式,所以会返回有了a[b]:1这样属性的a对象;

与门短路操作:如果第一个操作数的值为true,进行短路操作,直接产生第一个操作数的值。如果为false,则产生第二个操作数的值。

逗号表达式:逗号表达式的一般形式是:表达式1,表达式2,表达式3……表达式n。逗号表达式的求解过程是:先计算表达式1的值,再计算表达式2的值,……一直计算到表达式n的值。最后整个逗号表达式的值是表达式n的值。

3.之后要说下reduce函数,它可以将之前一次执行后返回的结果作为参数继续和之后的元素一同传入callback执行,相当于fn(fn(fn(fn(a,b),c),d),e),fn即为callback;

4.在本例中,因为有第二个参数{}传入,所以callback执行了6次。相当于对数组中每一个元素都进行了录入和查重操作,比如当callback运行到第四次,这时的a是{q:1,w:1,e:1},执行callback,a[b]即a['q']存在,执行a['q']++,a['q']值为2,以此类推,最后得到的就是一个以数组每个元素为属性名,出现次数为属性值的对象。

需要注意的是,reduce是es5推出的方法,ie8及以下都不兼容。

以上所述是小编给大家介绍的Javascript面试经典套路reduce函数查重,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# javascript  # reduce  # js  # 面试套路  # 如何在面试中手写出javascript节流和防抖函数  # JavaScript基础学习之splice()函数详解  # JavaScript函数式编程(Functional Programming)组合函数(Compos  # JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】  # 「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)  # JavaScript前端面试组合函数  # 第一个  # 第二个  # 值为  # 小编  # 的是  # 组中  # 是一个  # 都不  # 将会  # 在此  # 是这样  # 以此类推  # 给大家  # 它可以  # 什么呢  # 会给  # 几步  # 很明显  # 干了  # 有价值 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Laravel distinct去重查询_Laravel Eloquent去重方法  jQuery validate插件功能与用法详解  如何用低价快速搭建高质量网站?  开心动漫网站制作软件下载,十分开心动画为何停播?  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何打造高效商业网站?建站目的决定转化率  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  利用 Google AI 进行 YouTube 视频 SEO 描述优化  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  敲碗10年!Mac系列传将迎来「触控与联网」双革新  利用vue写todolist单页应用  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  linux写shell需要注意的问题(必看)  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  如何快速搭建自助建站会员专属系统?  iOS正则表达式验证手机号、邮箱、身份证号等  昵图网官网入口 昵图网素材平台官方入口  网站制作价目表怎么做,珍爱网婚介费用多少?  如何在万网自助建站中设置域名及备案?  微信小程序 require机制详解及实例代码  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Android使用GridView实现日历的简单功能  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  网易LOFTER官网链接 老福特网页版登录地址  微信小程序 scroll-view组件实现列表页实例代码  Laravel Session怎么存储_Laravel Session驱动配置详解  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  网站制作报价单模板图片,小松挖机官方网站报价?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Internet Explorer官网直接进入 IE浏览器在线体验版网址  javascript中闭包概念与用法深入理解  如何在IIS中新建站点并配置端口与IP地址?  linux top下的 minerd 木马清除方法  如何在云主机上快速搭建多站点网站?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  简单实现Android文件上传  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  如何选择PHP开源工具快速搭建网站?  详解Android中Activity的四大启动模式实验简述  html5的keygen标签为什么废弃_替代方案说明【解答】  桂林网站制作公司有哪些,桂林马拉松怎么报名?  微信小程序 input输入框控件详解及实例(多种示例)  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】