基于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实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
Jun 06 Javascript
javascript 回到顶部效果的实现代码
Feb 17 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
Jan 06 Javascript
jquery中实现时间戳与日期相互转换
Apr 12 Javascript
用原生js统计文本行数的简单示例
Aug 19 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
Nov 21 Javascript
javascript删除html标签函数cIsHTML
Jan 09 Javascript
微信小程序调用PHP后台接口 解析纯html文本
Jun 13 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
Sep 06 Javascript
基于vue中keep-alive缓存问题的解决方法
Sep 21 Javascript
layui实现数据分页功能(ajax异步)
Jul 27 Javascript
openlayers4.6.5实现距离量测和面积量测
Sep 25 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
phpmyadmin的#1251问题
2006/11/25 PHP
php数组(array)输出的三种形式详解
2013/06/05 PHP
深入理解PHP中的global
2014/08/19 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
php 数据结构之链表队列
2017/10/17 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
2019/05/25 PHP
javascript与CSS复习(二)
2010/06/29 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
python 正则表达式 概述及常用字符
2009/05/04 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
python 构造三维全零数组的方法
2018/11/12 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
设计师珠宝:Ylang 23
2018/05/11 全球购物
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
优秀公益广告词大全
2014/03/19 职场文书
打架检讨书范文
2015/01/27 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
PHP实现考试倒计时功能代码
2021/04/16 PHP
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL