Javascript:自然排列的字母数字字符串

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我正在寻找最简单的方法来排序由数字和文本组成的数组,以及它们的组合。

'123asd'
'19asd'
'12345asd'
'asd123'
'asd12'

变成

'19asd'
'123asd'
'12345asd'
'asd12'
'asd123'

排序功能本身起作用,我需要的是一个可以说'19asd'小于'123asd'的函数。

提问于
用户回答回答于

现在可以在使用localeCompare的现代浏览器中使用了。通过numeric: true选项,它会巧妙地识别数字。你可以做不区分大小写的使用sensitivity: 'base'。经过Chrome,Firefox和IE11测试。

这是一个例子。它返回1,意味着10在2之后:

'10'.localeCompare('2', undefined, {numeric: true, sensitivity: 'base'})

为了在排序大量字符串时的性能,文章写道:

比较大数量的字符串时,比如在排序大数组时,最好创建一个Intl.Collat​​or对象并使用它的compare属性提供的函数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
var myArray = ['1_Document', '11_Document', '2_Document'];
myArray.sort(collator.compare);
// myArray is now ['1_Document', '2_Document', '11_Document']
用户回答回答于

扫码关注云+社区