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 相关文章推荐
jquery获取对象的方法足以应付常见的各种类型的对象
May 14 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
Jun 25 Javascript
jQuery绑定事件-多种实现方式总结
May 09 Javascript
Vue.js学习笔记之常用模板语法详解
Jul 25 Javascript
two.js之实现动画效果示例
Nov 06 Javascript
在 React、Vue项目中使用SVG的方法
Feb 09 Javascript
区别JavaScript函数声明与变量声明
Sep 12 Javascript
Node批量爬取头条视频并保存方法
Sep 20 Javascript
JavaScript一元正号运算符示例代码
Jun 30 Javascript
JS实现移动端点击按钮复制文本内容
Jul 28 Javascript
谈谈IntersectionObserver懒加载的具体使用
Oct 15 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
Jul 20 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获取淘宝分类id示例
2014/01/16 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
php array_map()函数实例用法
2021/03/03 PHP
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
jQuery中animate()方法用法实例
2014/12/24 Javascript
javascript 实现map集合
2015/04/03 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
JavaScript之数组扁平化详解
2019/06/03 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
Python列表(List)知识点总结
2019/02/18 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
比较基础的php面试题及答案-编程题
2012/10/14 面试题
高中毕业生自我鉴定范文
2013/09/26 职场文书
大学应届生求职简历的自我评价
2013/10/08 职场文书
护士在校生自荐信
2014/02/01 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
荆州古城导游词
2015/02/06 职场文书
信息技术教研组工作总结
2015/08/13 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书