关于javascript:对字符串的数字部分进行排序?

Sort number part of a string?

本问题已经有最佳答案,请猛点这里访问。

我们有一堆SomeItems,其中的字段someId的格式为(简化/替换为虚拟变量):

abc.def1.<someNumber>

我有一个SomeItems数组,并一直像这样进行排序:

1
let rows = someItems.sort((lhs, rhs) => lhs.someId > rhs.someId)

这几乎只是按字母顺序排序,因此这意味着该顺序有点奇怪:

1
2
3
4
5
abc.def1.1
abc.def1.1234
abc.def1.1235
abc.def1.2
abc.def1.234

我反而希望对它进行数字排序-像1,2,234,1234等。

什么是干净的方法?


您可以将String#localeCompare与选项一起使用。

1
2
3
4
5
6
7
var array = ['abc.def1.1', 'abc.def1.1234', 'abc.def1.1235', 'abc.def1.2', 'abc.def1.234'];

array.sort(function (a,b) {
    return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' });
});

console.log(array);