当前位置: 首页 > 后端技术 > Node.js

JS单行、多行文本字符去重和行去重

时间:2023-04-03 20:30:56 Node.js

偶然看到一篇文章用正则化实现字符去重和多行去重。感觉写的有点粗糙,性能不够高,新手使用和理解有点困难。所以我忍不住想出了一个更可爱的。而且它通常并不可爱,因为随着角色数量的增加,它的性能会以未知数量的街道甩掉前者。知识点这里的实现对知识点要求很低。无论你是老司机还是菜鸟,基本上一眼就能看出它的真谛;超级好用的Array.from()[不知道?】,当然可以使用经典的slice.call()来轻松搞定古董浏览器;Arraycup接口Array.prototype.reduce(Func[,initialValue]):Array|TypeLike[initialValue],广泛用于各种求值操作,这里不再赘述;高值String.prototype.match(string|RegExp):null|Array;使用最高评价率Array.prototype.split(string|RegRxp):Array;newArray.prototype.includes(string):boolean,当然你也可以使用其他接口如:indexOf()、find()、some()等;正则表达式注:本文不涉及底层接口分析的运行原理。有兴趣的请自行查阅相关文档,深入了解前端性能优化;单行文本去重//单行文本去重functionSingleLineDistinct(str){//Array.prototype.slice.call(str|newString(str))兼容不支持from接口的浏览器returnArray.from(str).reduce(//这里应该很容易理解你在做什么?(pre,cur)=>(pre.match(cur)?pre:pre+cur),//需要传入一个初始值空字符串参数,否则字符串拆分后会得到一个数组。"");}多行字符去重多行字符去重直接基于一个简单的封装函数MultiLineCharDistinct(mlstr){//是不是超级简单?returnmlstr.split("\n").map(SingleLineDistinct).join("\n")}多行去重也很简单,用数组判断接口即可。functionMultiLineDistinct(str,spl="\n"){//这里不能传初始空字符串给reduce,因为会返回returnstr.split(spl).reduce(//判断,在初始数组是否有与当前行相同的字符串,如果没有,则压入当前行,返回一个数组;(pre,cur)=>(!pre.includes(cur)&&pre.push(cur),pre),[])//进行行分割。加入(spl);见证奇迹的时刻到了,下面贴出上述使用正则表达式对单行去重的代码:functionDistinctString(s){vara;while((a=s.replace(/(.)(.*?)\1/,"$1$2"))!=s)s=a;returns;}下面我们来对比一下两个单行去重函数的性能Le:【高能预警!】首先我们在SingleLineDistinct()和DistinctString()函数中加上执行时间打印console.time()和console.timeEnd()【这里不是本文重点,不做应用说明】,就变成了这样这个:函数DistinctString(s){console.time('dstring');变种;while((a=s.replace(/(.)(.*?)\1/,"$1$2"))!=s)s=a;控制台.timeEnd('dstring');returns;}//单行文本去重函数SingleLineDistinct(str){console.time('sldist');str=Array.from(str).reduce((pre,cur)=>(pre.match(cur)?pre:pre+cur),"");console.timeEnd('sldist');returnstr;}我们定义了一个一个letstr="lsdjfl....."随机重复字符变量,然后就轮到他们两个玩了:嘿嘿~~,互...DistinctString:不好意思,打错了,再来!DistinctString:SingleLineDistinct,等我!SingleLineDistinct:抱歉,你慢了哈哈哈哈,怎么样,是不是很有趣?希望你们都喜欢!如果大家有更好更快的方法,欢迎交流~免责声明:本文内容并非否定正则表达式。正则表达式的威力是无可替代的。请不要误会。我只是想通过这样一个栗子告诉大家,每种方法都有其优缺点。要想编写出高性能、高质量的代码,就必须了解其运行原理和底层技术,这样才能在编程时选择更好的代码组织方式,提高应用程序的执行效率。