基于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模仿的a的title属性(兼容ie6/7)
Jan 21 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
Aug 21 Javascript
JavaScript验证Email(3种方法)
Sep 21 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
Sep 23 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
Nov 16 Javascript
javascript动画之磁性吸附效果篇
Dec 09 Javascript
jQuery实现 上升、下降、删除、添加一行代码
Mar 06 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
Mar 24 jQuery
基于vue展开收起动画的示例代码
Jul 05 Javascript
详解vue的数据劫持以及操作数组的坑
Apr 18 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
Nov 14 Javascript
Vue性能优化的方法
Jul 30 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
如何使用脚本模仿登陆过程
2006/11/22 PHP
PHP 柱状图实现代码
2009/12/04 PHP
使用php-timeit估计php函数的执行时间
2015/09/06 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
Vuex 模块化使用详解
2019/07/31 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
python 简易计算器程序,代码就几行
2009/08/29 Python
python实现保存网页到本地示例
2014/03/16 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
修改python plot折线图的坐标轴刻度方法
2018/12/13 Python
Python文件读写常见用法总结
2019/02/22 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
大学军训感言800字
2014/02/27 职场文书
连带责任保证书
2014/04/29 职场文书
2014年教师节活动总结
2014/08/29 职场文书
新课培训心得体会
2014/09/03 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
2014年林业工作总结
2014/12/05 职场文书
保安2014年终工作总结
2014/12/06 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
主婚人致辞精选
2015/07/28 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
使用MybatisPlus打印sql语句
2022/04/22 SQL Server
Python 中面向接口编程
2022/05/20 Python
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers