我有一个字母数字数组,我需要按字母升序排序,然后按数字降序排序,数组如下:
[A1, A4, A2, A3, C2, C4, C3, B3, B5, B4]如何使用JavaScript对数组进行排序,看起来如下:
[A4, A3, A2, A1, B5, B4, B3, C4, C3, C2]我试过:
arr.sort() 但这只是按字母和数字顺序排列,给我:
[A1, A2, A3, A4, B3, B4, B5, C2, C3, C4]发布于 2022-03-29 11:51:38
如果你总是有一个字母,你可以根据数字休息和第一个字母排序。
const
array = ['A1', 'A4', 'A2', 'A3', 'C2', 'C4', 'C3', 'B3', 'B5', 'B4'];
array.sort((a, b) => a[0].localeCompare(b[0]) || b.slice(1) - a.slice(1));
console.log(...array);
如果您有多个字母,您可以接受一个正则表达式,只获取数字和非数字,分隔为一个对象。
const
getValues = string => ({
letters: string.match(/\D+/)[0],
digits: string.match(/\d+/)[0]
}),
array = ['A1', 'A4', 'A2', 'A3', 'C2', 'C4', 'C3', 'B3', 'B5', 'B4'];
array.sort((a, b) => {
const [aa, bb] = [a, b].map(getValues);
return aa.letters.localeCompare(bb.letters)
|| bb.digits - aa.digits;
});
console.log(...array);
发布于 2022-03-29 11:47:01
array.sort接受回调,在这里可以定义如何比较数组中的两个元素的条件
要执行您的需要,一个想法可以是返回第二个字符的比较,如果第一个字符是相同的。
var data = ['A1', 'A4', 'A2', 'A3', 'C2', 'C4', 'C3', 'B3', 'B5', 'B4'];
var result = data.sort((a, b) => {
if (a === b) {
return 0;
}
if (a[0] === b[0]) {
return (a[1] > b[1]) ? -1 : 1;
}
return (a > b) ? 1 : -1;
});
console.log(result);
https://stackoverflow.com/questions/71661332
复制相似问题