如何在 JavaScript 中對混合數字/字母數字陣列進行排序
假設我們有一個這樣的字母數字字串陣列 −
const arr = ['A1', 'A10', 'A11', 'A12', 'A3A', 'A3B', 'A3', 'A4', 'B10', 'B2', 'F1', '1', '2', 'F3'];
我們需要編寫一個 JavaScript 函式,其中一個這樣的陣列作為一個且唯一的引數。
並且該函式應該按原樣對該陣列進行排序 −
- 僅包含數字的字串應首先按升序排序。
- 包含字母和數字組合的字串應首先按字母順序排序,然後按升序排序。
因此,輸出應如下所示 −
const output = ['1', '2', 'A1', 'A2', 'A3', 'A3A', 'A3B', 'A4', 'A10', 'A11', 'A12', 'B2', 'B10', 'F1', 'F3'];
示例
const arr = ['A1', 'A10', 'A11', 'A12', 'A3A', 'A3B', 'A3', 'A4', 'B10', 'B2', 'F1', '1', '2', 'F3'];
const alphaNumericSort = (arr = []) => {
const sorter = (a, b) => {
const isNumber = (v) => (+v).toString() === v;
const aPart = a.match(/\d+|\D+/g);
const bPart = b.match(/\d+|\D+/g);
let i = 0; let len = Math.min(aPart.length, bPart.length);
while (i < len && aPart[i] === bPart[i]) { i++; };
if (i === len) {
return aPart.length - bPart.length;
};
if (isNumber(aPart[i]) && isNumber(bPart[i])) {
return aPart[i] - bPart[i];
};
return aPart[i].localeCompare(bPart[i]); };
arr.sort(sorter);
};
alphaNumericSort(arr);
console.log(arr);輸出
在控制檯中的輸出為 −
[ '1', '2', 'A1', 'A3', 'A3A', 'A3B', 'A4', 'A10', 'A11', 'A12', 'B2', 'B10', 'F1', 'F3' ]
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP