我正在使用Reactjs和underscore.js开发应用程序。我正在尝试使用名称(一个字符串)对列表进行排序。但是,名称包含数字,因此排序不正确。这是我的代码及其结果的示例:

items= _.sortBy(items, function (item) {
    return item.name.toLowerCase()
});


结果:

S1.2M (FA)
S10.1M
S10.2M
S10.4M
S11 (GR14)
S2 (DT)
S3.1M (GR17)


但我希望结果是这样的:

S1.2M (FA)
S2 (DT)
S3.1M (GR17)
S10.1M
S10.2M
S10.4M
S11 (GR14)


我该如何实现?

最佳答案

简短答案:
您要查找的术语是“自然排序”,这不是您可以轻松地在1行中实现的。

Underscore使其更加困难,因为它不提供2个要比较的元素,而仅提供1个要比较的指标。

您可以找到很多示例:

Javascript : natural sort of alphanumerical strings



Underscore.js sort an array of objects alphanumerically

使用underscorejs可以实现的最接近的结果是:

_.sortBy(items, function (a) {
    return parseInt(a.match(/\d+/)[0]);
});


它只是比较字符串中的第一个数字(不是数字)。

09-25 16:08