前端对1a-1, 2a-2
这种格式数据进行排序
const arr = ['1a-1', '1a-14', '1c-3', '2a-1', '3a-1'];
arr.sort((a, b) => {
// 用正则拆分字符串为三部分:数字、字母、数字
const partsA = a.match(/^(\d+)([a-zA-Z]+)-(\d+)$/);
const partsB = b.match(/^(\d+)([a-zA-Z]+)-(\d+)$/);
// 比较第一部分数字
const numA = parseInt(partsA[1], 10);
const numB = parseInt(partsB[1], 10);
if (numA !== numB) return numA - numB;
// 比较中间字母
const charA = partsA[2];
const charB = partsB[2];
if (charA !== charB) return charA.localeCompare(charB);
// 比较最后数字
return parseInt(partsA[3], 10) - parseInt(partsB[3], 10);
});
console.log(arr); // ['1a-1', '1a-14', '1c-3', '2a-1', '3a-1']