我有一個字母數字陣列,我需要按字母升序然后按數字降序排序,陣列如下:
[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]
uj5u.com熱心網友回復:
如果您始終只有一個字母,則可以按數字其余部分和第一個字母進行排序。
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);
uj5u.com熱心網友回復:
您需要撰寫一個自定義函式,將字串和數字部分與值分開并一一進行比較:
const array = ["A1", "A4", "A2", "A3", "C2", "C4", "C3", "B3", "B5", "B4"];
array.sort(function(a, b) {
let astr = a.slice(0, 1);
let bstr = b.slice(0, 1);
let aint = Number(a.slice(1));
let bint = Number(b.slice(1));
return astr.localeCompare(bstr) || bint - aint;
});
console.log(array);
uj5u.com熱心網友回復:
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://www.uj5u.com/shujuku/452459.html
標籤:javascript 数组 排序
上一篇:如何在不使用Arrays.sort()的情況下對整數陣列從最小值到最大值進行排序?
下一篇:相對于主對角線對二維陣列進行排序
