基于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 相关文章推荐
基于jquery的划词搜索实现(备忘)
Sep 14 Javascript
对于this和$(this)的个人理解
Sep 08 Javascript
javascript实现动态侧边栏代码
Feb 19 Javascript
Javascript基础教程之break和continue语句
Jan 18 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
Mar 31 Javascript
checkbox批量选中,获取选中项的值的简单实例
Jun 28 Javascript
基本DOM节点操作
Jan 17 Javascript
JavaScript获取当前时间向前推三个月的方法示例
Feb 04 Javascript
JS日程管理插件FullCalendar中文说明文档
Feb 06 Javascript
简单谈谈vue的过渡动画(推荐)
Oct 11 Javascript
基于JavaScript实现五子棋游戏
Aug 26 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
Jan 09 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
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
js以对象为索引的关联数组
2010/07/04 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
python安装scipy的方法步骤
2019/06/26 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
网络技术支持面试题
2013/04/22 面试题
广告语设计及教案
2014/03/21 职场文书
鉴定评语大全
2014/05/05 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js
Django框架中视图的用法
2022/06/10 Python