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 相关文章推荐
在网页中使用document.write时遭遇的奇怪问题
Aug 24 Javascript
javascript闭包传参和事件的循环绑定示例探讨
Apr 17 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
May 14 Javascript
confirm的用法示例用于按钮操作时确定是否执行
Jun 19 Javascript
js实现jquery的offset()方法实例
Jan 10 Javascript
javascript用函数实现对象的方法
May 14 Javascript
js淡入淡出焦点图幻灯片效果代码分享
Sep 08 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
Jun 01 Javascript
基于ajax和jsonp的原生封装(实例)
Oct 16 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
May 09 Javascript
深入学习JavaScript中的bom
May 27 Javascript
JS实现的tab切换并显示相应内容模块功能示例
Aug 03 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
PHP数据类型的总结分析
2013/06/13 PHP
php调用c接口无错版介绍
2014/03/11 PHP
PHP中trim()函数简单使用指南
2015/04/16 PHP
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
PHP使用观察者模式处理异常信息的方法详解
2019/09/24 PHP
jquery 插件学习(二)
2012/08/06 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
Python3.2中Print函数用法实例详解
2015/05/19 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
国贸专业的职业规划范文
2014/01/23 职场文书
商场促销活动方案
2014/02/08 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
社会实践评语
2014/04/28 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL
python高温预警数据获取实例
2022/07/23 Python
css弧边选项卡的项目实践
2023/05/07 HTML / CSS