JS中使用sort结合localeCompare实现中文排序实例


Posted in Javascript onJuly 23, 2014

说到表格排序,首先要说的就一定是数组的排序,因为数组排序是表格排序的基础。

JavaScript为数组提供了sort()方法用于表格排序,默认情况下该方法会使Array中的数组按照ASCII码的顺序进行排列,JavaScript还为数组提供了数组倒序的方法reverse()。

看一下示例:

 function sortArray(){

             var arrayTest = ["z",5,2,"a",32,3];

             arrayTest.sort();

             alert(arrayTest.toString());     //output:2,3,32,5,a,z

             arrayTest.reverse();

             alert(arrayTest.toString());    //output:z,a,5,32,3,2

         }

         sortArray();

呵呵,5比32还要大,很明显这不是我们想要的结果,刚才已经说过sort()方法是按照ASCII码的顺序排序的。

其实sort()方法还允许带一个函数类型的的参数,我们可以称之为比较函数,当该比较函数又可以接收两个参数,以下该函数返回值的意义:

-1:第一个参数 小于 第二个参数

0:第一个参数 等于 第二个参数

1:第一个参数 大于 第二个参数
/**

  * 比较函数

  * @param {Object} param1 要比较的参数1

           * @param {Object} param2 要比较的参数2

           * @return {Number} 如果param1 > param2 返回 1

           *                     如果param1 == param2 返回 0

           *                     如果param1 < param2 返回 -1

           */

          function compareFunc(param1,param2){

             //如果两个参数均为字符串类型

             if(typeof param1 == "string" && typeof param2 == "string"){

                 return param1.localeCompare(param2);

             }

             //如果参数1为数字,参数2为字符串

             if(typeof param1 == "number" && typeof param2 == "string"){

                 return -1;

             }

             //如果参数1为字符串,参数2为数字

             if(typeof param1 == "string" && typeof param2 == "number"){

                 return 1;

             }

             //如果两个参数均为数字

             if(typeof param1 == "number" && typeof param2 == "number"){

                 if(param1 > param2) return 1;

                 if(param1 == param2) return 0;

                 if(param1 < param2) return -1;

             }

         }

当我们执行arrayTest.sort(compareFunc)时我们就得到了正确的结果。
到这里,我们不得不说明一下localeCompare()方法的用法,该方法是对字符串进行排序的方法,只有一个参数即要比较的字符串。

具体说明如下:

1、如果String对象按照字母顺序排在参数中的字符串之前,返回负数
2、如果String对象按照字符顺序排在参数中的字符串之后,返回正数
3、如果String对象等于参数中的字符串返回0

除此之外,localeCompare()方法还有一个独特之处,这个独特之处可以在其方法签名locale(现场、当地)上得以体现,也就是说他的实现时按照区域特性来的,如果在英语体系中,他的实现可能是按照字符串升序,如果在汉语中,他的实现则是按照首字母的拼音。

呵呵,这也就是说就算我们在程序中涉及汉字,我们的排序也不回出错。
参考以下程序:

var testArray = ["脚","本","之","家"];

         document.write(testArray.sort(

             function compareFunction(param1,param2){

                 return param1.localeCompare(param2);  //output:之,家,本,脚

             }

         ));
Javascript 相关文章推荐
js 自定义个性下拉选择框示例
Aug 20 Javascript
javascript里使用php代码实例
Dec 13 Javascript
JS动画效果打开、关闭层的实现方法
May 09 Javascript
JS中处理时间之setUTCMinutes()方法的使用
Jun 12 Javascript
js选择器全面解析
Jun 27 Javascript
AngularJS HTML DOM详解及示例代码
Aug 17 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
Jan 12 Javascript
详解javascript中对数据格式化的思考
Jan 23 Javascript
微信小程序之选项卡的实现方法
Sep 29 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
Sep 18 Javascript
javascript操作元素的常见方法小结
Nov 13 Javascript
从源码角度来回答keep-alive组件的缓存原理
Jan 18 Javascript
JS在IE下缺少标识符的错误
Jul 23 #Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
Jul 23 #Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
Jul 23 #Javascript
Javascript的&amp;&amp;和||的另类用法
Jul 23 #Javascript
jQuery获取节点和子节点文本的方法
Jul 22 #Javascript
jQuery打印图片pdf、txt示例代码
Jul 22 #Javascript
JavaScript匿名函数与委托使用示例
Jul 22 #Javascript
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
php zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
php使用数组填充下拉列表框的方法
2015/03/31 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
python字符串连接方式汇总
2014/08/21 Python
python进阶教程之动态类型详解
2014/08/30 Python
Python实现文件复制删除
2016/04/19 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
神经网络python源码分享
2017/12/15 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
Python pandas用法最全整理
2019/08/04 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
2020/04/09 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
大一自我鉴定范文
2013/12/27 职场文书
2014年元旦感言
2014/03/06 职场文书
岗位职责风险点
2014/03/12 职场文书
责任担保书范文
2014/05/21 职场文书
数学教师个人总结
2015/02/06 职场文书
重阳节简报
2015/07/20 职场文书