JavaScript localeCompare排序不好[“aaa-1.0”、“aaa-1.1”、“aaa-1.01”、“aaa-11”、“aaa-2.01”]
我想按十进制数值和字母顺序对字符串进行排序。保持它的自然秩序JavaScript localeCompare排序不好[“aaa-1.0”、“aaa-1.1”、“aaa-1.01”、“aaa-11”、“aaa-2.01”],javascript,sorting,Javascript,Sorting,我想按十进制数值和字母顺序对字符串进行排序。保持它的自然秩序 var strArray = ["aaa-0", "aaa-0.01", "aaa-1.0", "aaa-1.1", "aaa-1.01", "aaa-2.01", "bbb-2.01", "aaa-11", "aaa-2.01"] strArray.sort(function (a, b) { return a.localeCompare(b,undefined, {numeric: true, sensitivity:
var strArray = ["aaa-0", "aaa-0.01", "aaa-1.0", "aaa-1.1", "aaa-1.01", "aaa-2.01", "bbb-2.01", "aaa-11", "aaa-2.01"]
strArray.sort(function (a, b) {
return a.localeCompare(b,undefined, {numeric: true, sensitivity: 'base'});
});
返回:
["aaa-0", "aaa-0.01", "aaa-1.0", "aaa-1.1", "aaa-1.01", "aaa-2.01", "aaa-2.01", "aaa-11", "bbb-2.01"]
虽然我想要:
["aaa-0", "aaa-0.01", "aaa-1.0", "aaa-1.01", "aaa-1.1", "aaa-2.01", "aaa-2.01", "aaa-11", "bbb-2.01"]
如何才能做到这一点?即使我用,而不是。排序是相同的。您需要分别对数字和字母进行排序 演示 var strArray=[aaa-0,aaa-0.01,aaa-1.0,aaa-1.1,aaa-1.01,aaa-2.01,bbb-2.01,aaa-11,aaa-2.01] strArray.sortfunctiona,b{ var splitA=a.split-; var splitB=b.split-; 如果splitA[0]==splitB[0]{ 返回NumbersplitA[1]-NumbersplitB[1]; }否则{ 返回splitA[0].localecompareplitb[0],未定义{ 数字:对, 敏感度:“基本” }; } }; 控制台。日志阵列 您可以将中的标志IgnorePerception设置为true 变量数组=[aaa-0,aaa-0.01,aaa-1.0,aaa-1.1,aaa-1.01,aaa-2.01,bbb-2.01,aaa-11,aaa-2.01] array.sort函数a,b{ 返回a.localeCompareb,未定义,{IgnorePerception:true,numeric:true,sensitivity:'base'}; }; console.logarray;
.作为控制台包装器{max height:100%!important;top:0;}@GabrielBleu,而不是在边缘。@GabrielBleu,它似乎依赖于用户代理实现。在我的情况下,它是有效的,不幸的是,它不是通用解决方案。谢谢