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 相关文章推荐
javascript 表单的友好用户体现
Jan 07 Javascript
jQuery获取地址栏参数插件(模仿C#)
Oct 26 Javascript
详谈javascript中DOM的基本属性
Feb 26 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
Aug 21 Javascript
JavaScript生成简单等差数列
Nov 28 Javascript
微信小程序实现文字从右向左无限滚动
Nov 18 Javascript
详解小程序设置缓存并且不覆盖原有数据
Apr 15 Javascript
解决layui的table插件无法多层级获取json数据的问题
Sep 19 Javascript
d3.js 地铁轨道交通项目实战
Nov 27 Javascript
微信小程序实现点击按钮后修改颜色
Dec 05 Javascript
js实现简单选项卡制作
Aug 05 Javascript
微信小程序实现拼图小游戏
Oct 22 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
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
PHP header函数分析详解
2011/08/06 PHP
浅析PHP的ASCII码转换类
2013/07/05 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
新手入门常用代码集锦
2007/01/11 Javascript
javascript类继承机制的原理分析
2009/09/12 Javascript
javascript 页面划词搜索JS
2009/09/28 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
Python重新加载模块的实现方法
2018/10/16 Python
python网络应用开发知识点浅析
2019/05/28 Python
python清空命令行方式
2020/01/13 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
python如何停止递归
2020/09/09 Python
英国最受欢迎的手表网站:Watch Shop
2016/10/21 全球购物
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
后勤副校长自我鉴定
2013/10/13 职场文书
生物专业个人自荐信范文
2013/11/29 职场文书
优秀学生获奖感言
2014/02/15 职场文书
成绩单公证书
2014/04/10 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
三八妇女节标语
2014/10/09 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android