感谢this post,我使用了这段代码:
var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;
function sortAlphaNum(a, b) {
var aA = a.replace(reA, "");
var bA = b.replace(reA, "");
if (aA === bA) {
var aN = parseInt(a.replace(reN, ""), 10);
var bN = parseInt(b.replace(reN, ""), 10);
return aN === bN ? 0 : aN > bN ? 1 : -1;
} else {
return aA > bA ? 1 : -1;
}
}
但我尝试排序的有点复杂:
我有:
A1
A3
A5
A14
A6-1
A6-2
我预计:
A1
A3
A5
A6-1
A6-2
A14
最佳答案
您可以将其分为 3 个排序标准:1) 按第一个字符 2) 按第二个数字 3) 按可选的第三个数字(破折号 -
之后):
const arr = ['A5','A3','A1','A14','A6-2','A6-1'];
const sorted = arr.sort((a,b) => {
const [[aChar, aN1, aN2],[bChar, bN1, bN2]] = [a,b].map(x => x.match(/([A-Z])|([0-9]+)/gi).map(el => Number(el) || el));
const c1 = aChar.localeCompare(bChar);
const c2 = aN1 - bN1;
const c3 = (aN2 || 0) - (bN2 || 0);
return c1 || c2 || c3;
});
console.log(sorted);
关于javascript - 如何修改虚线单元格名称的排序代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52060899/