定义:用本地特定的顺序来比较两个字符串。

  语法:stringObject.localeCompare(target)

  参数:target——要以本地特定的顺序与 stringObject 进行比较的字符串。

  返回值:说明比较结果的数字。

  (1)如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。

  (2)如果 stringObject 大于 target,则该方法返回大于 0 的数。

  (3)如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。

  说明:把 < 和 > 运算符应用到字符串时,它们只用字符的 Unicode 编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。localeCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。ECMAscript 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。

  实例:

1、可以使用localeCompare() 方法来实现中文按照拼音排序,方法相当简单

var array = ['白鸽', '麻雀', '大象', '狗', '猫', "鸡"];
array = array.sort(function compareFunction(item1, item2) {
return item1.localeCompare(item2);
});
//["白鸽", "大象", "狗", "鸡", "麻雀", "猫"]

  而且可以通过如下代码实现中文按照拼音排序,并且可以将中文按照a,b,c,d……进行区分。代码如下:

function pySegSort(arr,empty) {
if(!String.prototype.localeCompare)
return null; var letters = "*abcdefghjklmnopqrstwxyz".split('');
var zh = "阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀".split(''); var segs = [];
var curr;
$.each(letters, function(i){
curr = {letter: this, data:[]};
$.each(arr, function() {
if((!zh[i-] || zh[i-].localeCompare(this) <= ) && this.localeCompare(zh[i]) == -) {
curr.data.push(this);
}
});
if(empty || curr.data.length) {
segs.push(curr);
curr.data.sort(function(a,b){
return a.localeCompare(b);
});
}
});
return segs;
}
console.log(JSON.stringify(pySegSort(['白鸽', '麻雀','黑','大象', '狗', '猫','妈妈','马', "鸡",'瘦','胖'])));

  结果显示为:[{"letter":"b","data":["白鸽"]},{"letter":"d","data":["大象"]},{"letter":"g","data":["狗"]},{"letter":"h","data":["黑"]},{"letter":"j","data":["鸡"]},{"letter":"m","data":["妈妈","麻雀","马","猫"]},{"letter":"p","data":["胖"]},{"letter":"s","data":["瘦"]}];通过这个就可以写一个电话薄,像现在手机上面的,通过人名来进行分组、排序,之后再通过循环和布局就可以实现电话薄的功能。

2、实现字母、数字的混合排序:

var d = [,,,'a','k','b','d',,,'c']
d.sort(function(a,b){
var c = isFinite(a), // 如果 number 是有限数字(或可转换为有限数字),那么返回 true。否则,如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false。
d = isFinite(b);
return (c != d && d - c) || a > b;
})
console.log(d);
//[1, 2, 3, 10, 20, "a", "b", "c", "d", "k"]

  isFinite() 判断a、b是否是数字。

  return 后面的语句:

  c != d && c - d  如果c和d不相等 ,也就是说比较的值不是同一类型。那就比较 c-d的值是1还是-1(中间进行了隐式类型转换)

   如果c == d 也就是说c、d是同一类型的值,c、d可能都是字母,也可能都是数字。这里就可以直接比较大小了(都是字母的话不能直接做减法)。

  isFinite() 函数用于检查其参数是否是无穷大。如果 number 是有限数字(或可转换为有限数字),那么返回 true。否则,如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false。

JS排序:localeCompare() 方法实现中文排序、sort方法实现数字英文混合排序的更多相关文章

  1. js中的数组Array定义与sort方法使用示例

    Array的定义及sort方法使用示例 Array数组相当于java中的ArrayList  定义方法:  1:使用new Array(5  )创建数组 var ary = new Array(5): ...

  2. python中sorted方法和列表的sort方法使用详解

    一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的. 排序,数字.字符串按照ASCII,中文按照unicode从小到大排序 ...

  3. python中sorted方法和列表的sort方法使用

    一.基本形式 列表有自己的sort方法,器对列表进行原值排序,既然是原址排序,那显然元组不可能拥有这个方法,因为元组是不可修改的. 排序,数字.字符串按照ASCII,中文按照unicode从小到大排序 ...

  4. get方法传送中文乱码解决方法

    找到tomcat配置文件 server.xml 找到<Connector port="8080" .......  />   (......为配置文件中原来内容) 在最 ...

  5. Java中使用Collections.sort()方法对数字和字符串泛型的LIst进行排序

    在List的排序中常用的是Collections.sort()方法,可以对String类型和Integer类型泛型的List集合进行排序. 首先演示sort()方法对Integer类型泛型的List排 ...

  6. TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

    TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的键必 ...

  7. 【JavaScript排序】 sort()方法(解决null、undefined、0之间的排序(混乱)问题)

    JavaScript排序 - sort()方法 --解决null.undefined.0之间的排序(混乱)问题 一.普通的数组排序 ​ JavaScript中用方法sort()为数组排序.sort() ...

  8. 基于原生JS封装数组原型上的sort方法

    基于原生JS封装数组原型上的sort方法 最近学习了数组的原型上内置方法的封装,加强了用原生JS封装方法的能力,也进一步理解数组方法封装的过程,实现的功能.虽然没有深入底层,了解源码.以下解法都是基于 ...

  9. 【JS】297-[译]正确使用 sort() 方法

    点击上方"前端自习课"关注,学习起来~ 英文原文:[<Usar correctamente el método sort()>]文章地址:查看阅读原文.注意:内容有做精 ...

随机推荐

  1. matlab基本指令

    基本命令 close all //关闭所有figure 命令打开的窗口,在命令窗口输入 clear all //清除之前运行程序所存下的所有变量 size(mat) a = [1 2 3 ; 4 5 ...

  2. 微信小程序-表格形式如何布局?

    微信小程序没有现成的table标签,该怎么布局呢? <view class="my-grids"> <block wx:for="{{grids}}&q ...

  3. 使用css中的flex布局弹性手风琴效果

    不多说,直接上代码. <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  4. 32、Flask实战第32天:优化json数据的返回

    接着上节,我们通过jsonify返回json数据非常方便 ... return jsonify({"code": 400, "message": message ...

  5. JZYZOJ1445 [noip2014day1-T3]飞扬的小鸟 动态规划 完全背包

    http://172.20.6.3/Problem_Show.asp?id=1445 很容易看出来动态规划的本质,但是之前写的时候被卡了一下(不止一下),还是写一下题解. 直接暴力O(n*m^2)大概 ...

  6. 【20181019T3】比特战争【最小生成树思想】

    题面 [错解] Hmm不可做啊 要不按b排个序? 然后并查集瞎搞,刷刷刷过了样例 然后大样例大了几万倍 出了组小数据,Successful Hack 弃疗 水过10分 [正解] 用占领的边将顶点连起来 ...

  7. 【二分】Defense Lines

    [UVa1471] Defense Lines 算法入门经典第8章8-8 (P242) 题目大意:将一个序列删去一个连续子序列,问最长的严格上升子序列 (N<=200000) 试题分析:算法1: ...

  8. 【思路】Gym - 101173F - Free Figurines

    套娃形成一些链形结构,给你套娃的初始状态和目标状态,问你需要几步(将最外层套娃打开,以及将一整套套娃塞进一个空套娃都算一步)才能达到. 容易发现,只有每条链链尾的匹配段可以不拆,其他的都得拆开. #i ...

  9. CentOS 6.9下KVM虚拟机快照创建、删除、恢复(转)

    使用文件快照的方式实现文件备份,但单说快照(snapshot)的话,他是某一时间点(版本)你能看到的该时间点备份文件状态的全貌,通过文件的快照(全貌)你能恢复到特定时间点(版本)的文件状态. 创建虚拟 ...

  10. 你家的Wifi密码安全吗?

    WiFi在给我们提供方便的无线网络同时,也带了一些隐患.如果对WiFi不设密码的话,一来会因为蹭网而影响网速,二来给信息安全带来了不小隐患.针对WiFi的安全手段,一般来说就是加密.最初的加密方式是W ...