基于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中top的作用深入剖析
Mar 04 Javascript
禁用Enter键表单自动提交实现代码
May 22 Javascript
使用JS画图之点、线、面
Jan 12 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
Jun 26 Javascript
理解JavaScript表单的基础知识
Jan 25 Javascript
JavaScript记录光标在编辑器中位置的实现方法
Apr 22 Javascript
Node.js常用工具之util模块
Mar 09 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
Jun 22 Javascript
在Vue 中使用Typescript的示例代码
Sep 10 Javascript
如何优雅地在vue中添加权限控制示例详解
Mar 07 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
May 08 Javascript
webpack3升级到webpack4遇到问题总结
Sep 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
2.PHP入门
2006/10/09 PHP
php中实现记住密码自动登录的代码
2011/03/02 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
javaScript数组迭代方法详解
2016/04/14 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现基于权重的随机数2种方法
2015/04/28 Python
python遍历数组的方法小结
2015/04/30 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
python操作列表的函数使用代码详解
2017/12/28 Python
pandas全表查询定位某个值所在行列的方法
2018/04/12 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
Python 字符串、列表、元组的截取与切片操作示例
2019/09/17 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
2016/12/30 HTML / CSS
总经理办公室主任岗位职责
2013/11/12 职场文书
专业销售业务员求职信
2013/11/18 职场文书
校园文化建设方案
2014/02/03 职场文书
党员目标管理责任书
2014/07/25 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书