我正在使用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]);
});
它只是比较字符串中的第一个数字(不是数字)。