我正在寻找对包含数字和文本以及它们的组合的数组进行排序的最简单方法。
例如
'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));