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怎么把&amp;字符换成&quot;&amp;amp:&quot;
Oct 19 Javascript
Display SQL Server Version Information
Jun 21 Javascript
6个DIV 135或246间隔一秒轮番显示效果
Jul 24 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
May 10 Javascript
再谈javascript常见错误及解决方法
Sep 16 Javascript
利用JQuery阻止事件冒泡
Dec 01 Javascript
vue-loader教程介绍
Jun 14 Javascript
浅谈ECMAScript6新特性之let、const
Aug 02 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
Sep 27 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
Oct 12 Javascript
js代码编写无缝轮播图
Sep 13 Javascript
JavaScript中arguments的使用方法详解
Dec 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 sleep()函数, usleep()函数
2016/08/25 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
JQuery实现自定义对话框的代码
2008/06/15 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
原生js制作简单的数字键盘
2015/04/24 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
通过实例解析Python调用json模块
2019/12/11 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
什么叫做SQL注入,如何防止
2016/10/04 面试题
八项规定整改措施
2014/02/12 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
实习单位鉴定意见
2015/06/04 职场文书
圣诞晚会主持词
2015/07/01 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
创业计划书之干洗店
2019/09/10 职场文书
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
Windows7下FTP搭建图文教程
2022/08/05 Servers