基于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 相关文章推荐
javascript Keycode对照表
Oct 24 Javascript
原生JavaScript实现连连看游戏(附源码)
Nov 05 Javascript
js实现下拉框选择要显示图片的方法
Feb 16 Javascript
浅谈JavaScript的事件
Feb 27 Javascript
Javascript中的数组常用方法解析
Jun 17 Javascript
angular分页指令操作
Jan 09 Javascript
JS组件系列之JS组件封装过程详解
Apr 28 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
May 09 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
Nov 26 Javascript
Vue最新防抖方案(必看篇)
Oct 30 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
Nov 12 Javascript
深入浅析JavaScript中的in关键字和for-in循环
Apr 20 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
各种战术和打法的原创者
2020/03/04 星际争霸
谈谈PHP语法(2)
2006/10/09 PHP
php REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
jquery操作select option 的代码小结
2011/06/21 Javascript
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
python实现与redis交互操作详解
2020/04/21 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
浅析Python requests 模块
2020/10/09 Python
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
中西医专业毕业生职业规划书
2014/02/24 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
防溺水主题班会教案
2015/08/12 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python