我正在嘗試對數組進行排序:
["B3", "D2", "F1", "A9", "D12", "A2", "C1", "Z0", "B1"]
預期產出應為:
["Z0", "B1", "C1", "F1", "A2", "D2", "B3", "A9", "D12"]
這是我的代碼:
let array = ["B3", "D2", "F1", "A9", "D12", "A2", "C1", "Z0", "B1"];
let collator = new Intl.Collator(undefined, {
numeric: true,
sensitivity: "base",
});
console.log(array.sort(collator.compare));
然后首先按字母表對輸出進行排序,得出:
["A2", "A9", "B1", "B3", "C1", "D2", "D12", "F1", "Z0"]
所以我發現,如果我像這樣切換有價值的位置:
["3B", "2D", "1F", "9A", "12D", "2A", "1C", "0Z", "1B"]
然后再把它傳給collator,它會給我正確的排序順序,但是數字和字母是翻轉的。然后我得把它們翻回去。有更好的方法嗎?
如果你總是有一個字母,你可以按數字和第一個字母排序。
如果有多個字母,可以使用正則表達式,只得到數字和非數字,并將它們分隔為一個對象。