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

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

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

  return 后面的语句:

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

(2)如果c == d 也就是说c、d是同一类型的值,c、d可能都是字母,也可能都是数字。

(3)如果都是数字,这里就可以直接比较大小了(都是字母的话不能直接做减法)。

(4)如果都是字母的话,就可以使用 localeCompare 比较了。

转载于:https://www.cnblogs.com/goloving/p/7662676.html

JS排序:localeCompare() 方法实现中文排序、sort方法实现数字英文混合排序相关推荐

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

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

  2. js中关于array的slice和sort方法(转自JavaEye)

    一.array.slice(start, end) 方法: slice()是用来截取数组中的一部分,用它来复制数组,如果省略了end参数,则切分的数组包含从start开始到数组结束的所有元素. 现在要 ...

  3. 2.04 对字母数字的混合排序

    问题:现有字母和数字混合的数据,希望按照数字或字符部分来排序.考虑这个视图: create view V as select concat(ename, ' ',deptno) from emp; m ...

  4. ajax id sort,ajax返回的json内容进行排序使用sort()方法实现

    ajax返回的json内容进行排序使用sort()方法实现 关键方法:sort()用于对数组的元素进行排序. return a.num-b.num是升序: return b.num-a.num;是降序 ...

  5. python排序方法sorted和list.sort()使用讲解

    python排序方法sorted和list.sort使用讲解 前言 一.排序函数的算法原理 二.sorted()和List.sort()使用方法讲解 1.sorted()函数使用方法 2.List.S ...

  6. [Java基础] sort方法--------排序的那些事

    引言 在学习Java过程中,排序sort是我们常用的功能:在Java里,数组有Arrays.sort()可以排序,集合则是Collections.sort()方法排序:默认情况下是升序排列,但是降序又 ...

  7. Collections.sort()方法给集合排序

    Collections.sort()方法给集合排序 前言 因为Collections里面的sort()方法是静态方法,所以可以直接类名打点调用sort方法 Collections.sort()有两种参 ...

  8. linux awk 排序,利用Shell中awk和sort命令合并同类数据后并依据某一列进行排序

    待处理的数据格式如下: 为了便于统计分析,对数据进行如下处理: 当姓名相同的时候,将后面的值相加,最后依据后面值的大小进行排序. 思路:先使用awk对数据进行合并,然后使用sort对数据进行排序.aw ...

  9. [5 算法] 31. 了解各种排序选择(partition,stable_partition,nth_element,partial_sort,sort,stable_sort)

    1 完全排序sort 排序首先想到的是sort,但它并非在任何场合都是完美的,因为有时你不需要一个完全的排序. 2 部分排序partial_sort 如果你有一个存放Widget的vector,你需要 ...

最新文章

  1. 阿里某员工哀叹:头条的文档太混乱!阿里的文档读起来舒服!
  2. Shell中的if判断
  3. ExtJS学习:MVC模式案例(三)
  4. mysql数据表内容_MySQL数据表
  5. CSS reset的重新审视 – 避免样式重置
  6. 大数据技术之kafka (第 3 章 Kafka 架构深入) Zookeeper 在 Kafka 中的作用
  7. el-input 提示不能为空那个_dede后台发布文章的时候显示标题不能为空?
  8. CSDN-markdown编辑器使用教程存档
  9. cad如何多选对象_cad如何多选?在CAD里为什么只能选中一个对象,而不能累加选择多个对象?...
  10. jsGannt Improved 中文教程文档
  11. “包”治百病,BOS丰富的预付费资源包来了
  12. 掌控板教程 | 搞定 Siri 语音控制,只要半小时!
  13. mybatis-plus 分页类型转换工具类
  14. web之Cookies
  15. JAVA怎么批量更新mysql_java 批量添加、批量更新 操作数据库
  16. 【大话数据结构】第八章-查找(2)
  17. 智慧药店管理系统升级智慧药房管理更轻松
  18. 燃烧模拟软件Chemkin教程案例
  19. 很困。。。我要转。业。
  20. jsp使用zTree的详解

热门文章

  1. 用路由做企业管理:所有人都说不可能的时候(上)
  2. HM3416H降压IC芯片PWM/PFM 控制 DC-DC 降压转换器
  3. 关于java收费该如何
  4. 数据库域id_回答有关域ID保护的问题
  5. 基于LoRa技术的LoRaMESH智能环卫方案详解
  6. 微众信科IPO被中止: 自称合作放款6000亿 “银税直连“下业务受冲
  7. Mac安装Homebrew 详细教程
  8. 通用智能基础模型假说
  9. 系分 - 案例分析 - 项目管理
  10. 2020 Android 大厂面试-插件化、模块化、组件化,android开发环境的搭建视频