我正在寻找对包含数字和文本以及它们的组合的数组进行排序的最简单方法。
例如
'123asd' '19asd' '12345asd' 'asd123' 'asd12'
变成
'19asd' '123asd' '12345asd' 'asd12' 'asd123'
这将与我在这里提出的另一个问题的解决方案结合使用。
排序功能本身可以工作,我需要的功能是可以说‘19asd’小于‘123asd’。
我用JavaScript编写。
编辑:正如adormitu所指出的,我正在寻找的是用于自然排序的函数
现在,这在使用localeCompare的现代浏览器中成为可能。通过传递numeric: true选项,它将智能识别数字。您可以使用进行不区分大小写的操作sensitivity: 'base'。已在Chrome,Firefox和IE11中测试。
numeric: true
sensitivity: 'base'
这是一个例子。返回1,表示10之后是2:
1
'10'.localeCompare('2', undefined, {numeric: true, sensitivity: 'base'})
为了提高排序大量字符串时的性能,本文说:
比较大量字符串时,例如在对大型数组进行排序时,最好创建一个Intl.Collator对象,并使用其compare属性提供的功能。文件连结
var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'}); var myArray = ['1_Document', '11_Document', '2_Document']; console.log(myArray.sort(collator.compare));