自然排序的JavaScript实现

很多场合的排序都是按照字符串或数字的顺序来排序,但如果排序的内容既包含数字又有数字的时候,我们期望的排序往往是要让我们人类容易理解的那种方式。
比如下面的例子:
如果按照字符串的简单排序,下面的文件名的顺序就会是如此恶劣的:
Picture1.jpg
Picture10.jpg
Picture11.jpg
Picture12.jpg
Picture2.jpg
Picture3.jpg
Picture4.jpg
Picture5.jpg
Picture6.jpg
Picture7.jpg
Picture8.jpg
Picture9.jpg
按照我们人类的理解,很自然的期望的排序通常是下面的,正如Windows系统中的做法。
Picture1.jpg
Picture2.jpg
Picture3.jpg
Picture4.jpg
Picture5.jpg
Picture6.jpg
Picture7.jpg
Picture8.jpg
Picture9.jpg
Picture10.jpg
Picture11.jpg
Picture12.jpg

而这种排序的C#实现可以参考我早期的一篇文章《文件名智能排序的规则与算法》,这里要介绍的是JavaScript的实现。

有一个写法比较简单的开源Library,代码比较简单,但是实现效果比较符合自然排序的效果:Natural Compare

引用Natural Compare的JS文件之后就可以用了。

比如:

var array = ["Session 2", "Session A1", "Session A01", "Session 10", "Session1", "Session 1", "Session 01", "Session 001", "Session A2"];
array.sort(naturalCompare);
//排序之后的结果
["Session 001", "Session 01", "Session 1", "Session 2", "Session 10", "Session A01", "Session A1", "Session A2", "Session1"]
var a = [ {"street":"350 5th Ave", "room":"A-1021"}
        , {"street":"350 5th Ave", "room":"A-21046-b"} ];

// sort by street, then by room
a.sort(function(a, b){
  return String.naturalCompare(a.street, b.street) || String.naturalCompare(a.room, b.room);
})

 

原创文章,转载请注明: 转载自闲云博客

本文链接地址: 自然排序的JavaScript实现

发表评论

电子邮件地址不会被公开。 必填项已用*标注