宝哥软件园

基于JS的字母数字中文混合排序方法

编辑:宝哥软件园 来源:互联网 时间:2021-10-28

在上一篇文章中,我们介绍了JavaScript排序数组排序方法以及对自实现排序方法的总结,并用自己的方法实现了数字数组的排序。

当然,对我来说,在实践中使用排序方法更方便。但是在上一篇博文中,我只实现了数字的排序,而srot方法默认可以对字母进行排序!但是我的代码只能对数字进行排序,看起来还是很弱。

因此,我不得不添加一种可以排列字母甚至中文的排序方法。

实现代码

$ (function () {vararr=['jack ',' book ',' fun ',76,' love ',' mark ',' china ',' China ',' phone ','刘德华'];Console.log('原始数组');console . log(arr);Console.log('用于从小到大的方法排序');console . log(arrsortintomax(arr));Console.log('用于从大到小排序的方法');console . log(arrSortMaxToMin(arr));Console.log('原始数组');console . log(arr);});函数arrMinNum(arr){ var minNum=Infinity,index=-1,minVul=for(var I=0;一、长度;I){ if(type of(arr[I])==' string '){ if(arr[I]。charCodeAt()Minnum){ Minnum=arr[I]。charCodeAt();minVul=arr[I];索引=I;} } else { if(arr[I]minNum){ minNum=arr[I];minVul=arr[I]index=I;}}};返回{ ' minNum ' :minVul,' index ' : index };}函数arrsortintomax(arr){ var arrNew=[];var arrOld=arr . concat();for(var I=0;一、长度;I){ arrnew . push(arrMinNum(arrOld))。minNum);剪接。index,1)};返回(ArrNew);}函数arrMaxNum(arr){ var maxNum=-Infinity,index=-1,maxVul=for(var I=0;一、长度;I){ if(type of(arr[I])==' string '){ if(arr[I]。charCodeAt()MaxNum){ MaxNum=arr[I]。charCodeAt();maxVul=arr[I];索引=I;} } else { if(arr[I]MaxNum){ MaxNum=arr[I];maxVul=arr[I];索引=I;}}};返回{'maxNum':maxVul,' index ' : index };}函数arrSortMaxToMin(arr){ var arrNew=[];var arrOld=arr . slice(0);for(var I=0;一、长度;I){ ArrNew . push(ArrMaxNum(Arrold))。maxNum);arrOld.splice(arrMaxNum(arrOld))。指数,1);};返回(ArrNew);}运行截图如下:

字母数字中文混合排序结果

分类原则

如果是数字,则直接是数字进行比较。

如果是字符串,请使用charCodeAt()转换为Unicode进行排序。

Unicode是0-65535之间的整数。

其他说明

按照正常的排序逻辑,的数字比所有的字母都小,字母比所有的中文都小。汉语要按照第一个拼音的首字母排序。

我的代码没有实现,除了字母比全中文小。

逻辑也要实现。分别找出中文中的数字和字母,数字和数组比较,字母和字母比较,中文和中文比较,然后拼接数组。

获取中文的首字母可能有点麻烦。

汉字可以直接比较。

张飞想要做老大是有道理的

如上图所示,张飞想当老大是有道理的。JavaScript终于在千年之后洗清了张飞的名号,到时候应该是老大了!~

更多资讯
游戏推荐
更多+