我想按照字符串的“十进制”数字值和字母顺序对字符串进行排序。保持它的自然秩序。
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"]怎么才能做到这一点呢?即使我用",“而不是”。“分类是一样的。
发布于 2017-10-20 11:14:09
你需要把数字和字母分开排序。
演示
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) {
var splitA = a.split("-");
var splitB = b.split("-");
if (splitA[0] == splitB[0]) {
return (Number(splitA[1]) - Number(splitB[1]));
} else {
return splitA[0].localeCompare(splitB[0], undefined, {
numeric: true,
sensitivity: 'base'
});
}
});
console.log(strArray);
发布于 2017-10-20 11:16:21
您可以将参数中的标志true设置为true。
var array = ["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(function(a, b) {
return a.localeCompare(b, undefined, { ignorePunctuation: true, numeric: true, sensitivity: 'base' });
});
console.log(array);.as-console-wrapper { max-height: 100% !important; top: 0; }
https://stackoverflow.com/questions/46847780
复制相似问题