好的,我有一段代码按字母顺序对给出的名称进行排序。
但是代码并没有按照我想要的方式处理小数。
它以以下方式对名称进行排序(Obv 我宁愿它以数字递增):
它会订购它:
- 苹果 - 1.0051
- 苹果 - 1.1071
- 苹果 - 11.1592
- 苹果 - 12.0692
- 苹果 - 12.1717
- APPLE - 2.0186 << 这显然应该在“APPLE - 1.1071”之后
- 苹果 - 21.1407
- 苹果 - 22.089
- 苹果 - 23.069
- 香蕉 - 1.0051
- 香蕉 - 1.1071
- 香蕉 - 11.1592
- 香蕉 - 12.0692
- 香蕉 - 12.1717
- BANANA - 2.0186 << 这显然应该在“BANANA - 1.1071”之后
- 香蕉 - 21.1407
- 香蕉 - 22.089
- 香蕉 - 23.069
这是我正在使用的代码。我不完全理解代码,因为它是我一直在使用的一个片段。
function(a, b){
var nameA=a.myname.toLowerCase(), nameB=b.myname.toLowerCase()
if (nameA < nameB) //sort string ascending
return -1
if (nameA > nameB)
return 1
return 0 //default return value (no sorting)
}
问候, 强尼
最佳答案
Demo这是来源+小解释:
function fruit_sort(a, b) {
var parts = {
a: a.split('-'),
b: b.split('-')
};
if (parts.a[0] == parts.b[0]) // strings are the same
return parseFloat(parts.a[1]) - parseFloat(parts.b[1]); // sort by number
return parts.a[0] > parts.b[0] ? 1 : -1; // sort by string
}
var arr = ["APPLE - 1.0051",
"APPLE - 1.1071",
"APPLE - 11.1592",
"APPLE - 12.0692",
"BANANA - 1.0051",
"BANANA - 1.1071",
"BANANA - 11.1592",
"BANANA - 12.0692",
"BANANA - 12.1717",
"APPLE - 12.1717",
"APPLE - 2.0186",
"APPLE - 21.1407",
"BANANA - 23.069",
"APPLE - 22.089",
"APPLE - 23.069",
"BANANA - 2.0186",
"BANANA - 21.1407",
"BANANA - 22.089"];
arr.sort(fruit_sort);
console.log(arr);
// outputs
[
"APPLE - 1.0051",
"APPLE - 1.1071",
"APPLE - 2.0186",
"APPLE - 11.1592",
"APPLE - 12.0692",
"APPLE - 12.1717",
"APPLE - 21.1407",
"APPLE - 22.089",
"APPLE - 23.069",
"BANANA - 1.0051",
"BANANA - 1.1071",
"BANANA - 2.0186",
"BANANA - 11.1592",
"BANANA - 12.0692",
"BANANA - 12.1717",
"BANANA - 21.1407",
"BANANA - 22.089",
"BANANA - 23.069"
]
首先,该函数将术语拆分为它们的文本和数字部分——如果文本是偶数,它只按数值的 parseFloat 值排序——否则它首先按字符串值排序。
关于javascript正确排序十进制数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14540356/