如何修改虚线单元格名称的排序代码?



我使用这段代码,感谢这篇文章:

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);

根据 https://stackoverflow.com/a/4340339/4225796 的参考,感谢 Pyrlia @Leonid 并根据您的问题,您已经参考了相同的内容,因此使用相同的示例作为参考,

我们可以通过 str.replace(/-.*/g, "( 删除 - 和之后的数字;

var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;
var removeDash = /-.*/g;
var arr = ['A5','A3','A1','A14','A6-2','A6-1'];
console.log(arr.sort(sortAlphaNum));
function sortAlphaNum(a, b) {
a= a.replace(removeDash, "");
b= b.replace(removeDash, "");
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;
}
}

最新更新