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


Posted in Javascript onJune 06, 2016

在上篇文章给大家介绍了JavaScript sort数组排序方法和自我实现排序方法小结,用自己的方法实现了数字数组的排序。

当然,实际运用中,我还是会使用sort方法更加方便.但是,我上一篇博文,仅仅是实现了数字排序,而srot方法默认可是能给字母实现排序的哦!而我的代码只能排序数字,看起来还是弱弱的.

所以,我得加上能排字母甚至中文的排序方法.

实现代码

$(function(){
var arr = ["Jack","Book","Fung",76,"Love","Mark","中国","china","phone","刘德华"];
console.log('原数组');
console.log(arr);
console.log('for方法从小到大排序');
console.log(arrSortMinToMax(arr));
console.log('for方法从大到小排序');
console.log(arrSortMaxToMin(arr));
console.log('原数组');
console.log(arr);
});
function arrMinNum(arr){
var minNum = Infinity, index = -1,minVul = "";
for (var i = 0; i < arr.length; i++) {
if (typeof(arr[i]) == "string") {
if (arr[i].charCodeAt()<minNum) {
minNum = arr[i].charCodeAt();
minVul = arr[i];
index = i;
}
}else {
if (arr[i]<minNum) {
minNum = arr[i];
minVul = arr[i]
index = i;
}
}
};
return {"minNum":minVul,"index":index};
}
function arrSortMinToMax(arr){
var arrNew = [];
var arrOld = arr.concat();
for (var i = 0; i < arr.length; i++) {
arrNew.push(arrMinNum(arrOld).minNum);
arrOld.splice(arrMinNum(arrOld).index,1)
};
return (arrNew);
}
function arrMaxNum(arr){
var maxNum = -Infinity, index = -1,maxVul = "";
for (var i = 0; i < arr.length; i++) {
if (typeof(arr[i]) == "string") {
if (arr[i].charCodeAt()>maxNum) {
maxNum = arr[i].charCodeAt();
maxVul = arr[i];
index = i;
}
}else {
if (arr[i]>maxNum) {
maxNum = arr[i];
maxVul = arr[i];
index = i;
}
}
};
return {"maxNum":maxVul,"index":index};
}
function arrSortMaxToMin(arr){
var arrNew = [];
var arrOld = arr.slice(0);
for (var i = 0; i < arr.length; i++) {
arrNew.push(arrMaxNum(arrOld).maxNum);
arrOld.splice(arrMaxNum(arrOld).index,1);
};
return (arrNew);
}

运行截图如下:

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

排序原理

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

如果是字符串,则使用charCodeAt()转换成Unicode编码进行排序.

Unicode 是 0 - 65535 之间的整数

其他说明

按照正常的排序逻辑,应该是:数字比一切字母都小,字母比一切中文都小,中文应该按照首字拼音的首字母排序.

我的这段代码除了字母比一切中文都小这一条实现了,其他都没有实现.

逻辑也应该可以实现,把数字字母中文分别找出来,数字跟数组进行比较,字母跟字母比较,中文跟中文比较,然后拼接数组

中文获取首字的首字母可能稍微麻烦一点.

汉字居然可以直接比对的.

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

如上图所示,张飞想要做老大是有道理的.JavaScript终于在千年之后为张飞正名,当年他就应该是做老大的!~

Javascript 相关文章推荐
js 窗口抖动示例
Sep 04 Javascript
JQuery中属性过滤选择器用法实例分析
May 18 Javascript
javascript数据结构之双链表插入排序实例详解
Nov 25 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
Apr 01 Javascript
Bootstrap网格系统详解
Apr 26 Javascript
AngularJs自定义服务之实现签名和加密
Aug 02 Javascript
实现React单页应用的方法详解
Aug 02 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
Jul 18 jQuery
vue+mockjs模拟数据实现前后端分离开发的实例代码
Aug 08 Javascript
vue 使用html2canvas将DOM转化为图片的方法
Sep 11 Javascript
玩转vue的slot内容分发
Sep 22 Javascript
node.js基于socket.io快速实现一个实时通讯应用
Apr 23 Javascript
jquery树形菜单效果的简单实例
Jun 06 #Javascript
逻辑表达式中与或非的用法详解
Jun 06 #Javascript
node.js 中国天气预报 简单实现
Jun 06 #Javascript
JS中mouseover和mouseout多次触发问题如何解决
Jun 06 #Javascript
js获取元素的外链样式的简单实现方法
Jun 06 #Javascript
node.js cookie-parser之parser.js
Jun 06 #Javascript
gulp-htmlmin压缩html的gulp插件实例代码
Jun 06 #Javascript
You might like
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
jquery 表单进行客户端验证demo
2009/08/24 Javascript
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
深入浅析python继承问题
2016/05/29 Python
Python中dict和set的用法讲解
2019/03/28 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
python数据爬下来保存的位置
2020/02/17 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
Python实现像awk一样分割字符串
2020/09/15 Python
详解pandas赋值失败问题解决
2020/11/29 Python
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
大学校运会广播稿
2014/02/03 职场文书
幼儿老师求职信
2014/06/30 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
大学军训心得体会800字
2016/01/11 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL