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 相关文章推荐
XHTML-Strict 内允许出现的标签
Dec 11 Javascript
js 表单验证方法(实用)
Apr 28 Javascript
js生成的验证码的实现与技术分析
Sep 17 Javascript
使用JavaScript获取地址栏参数的方法
Dec 19 Javascript
js事件监听器用法实例详解
Jun 01 Javascript
jquery.cookie实现的客户端购物车操作实例
Dec 24 Javascript
jQuery轮播图效果精简版完整示例
Sep 04 Javascript
原生js获取left值和top值的三种方法
Aug 02 Javascript
vue综合组件间的通信详解
Nov 06 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
Feb 22 Javascript
详解React+Koa实现服务端渲染(SSR)
May 23 Javascript
微信小程序WebSocket实现聊天对话功能
Jul 06 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 网上商城促销设计实例代码
2012/02/17 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
php查找字符串出现次数的方法
2014/12/01 PHP
最佳JS代码编写的14条技巧
2011/01/09 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
AngularJs分页插件使用详解
2018/06/30 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
在react中使用vuex的示例代码
2018/07/30 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
python中from module import * 的一个坑
2014/07/20 Python
Python制作CSDN免积分下载器
2015/03/10 Python
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
浅析Python __name__ 是什么
2020/07/07 Python
canvas实现扭蛋机动画效果的示例代码
2018/10/17 HTML / CSS
医学检验专业大学生求职信
2013/11/18 职场文书
物业管理毕业生个人的求职信
2013/11/30 职场文书
村捐赠仪式答谢词
2014/01/21 职场文书
医学生职业生涯规划书范文
2014/03/13 职场文书
关于EntityWrapper的in用法
2022/03/22 Java/Android
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python
python井字棋游戏实现人机对战
2022/04/28 Python