[英]Javascript sort mixed alphanumeric array - letters ascending, numbers descending
我有一個字母數字數組,我需要按字母升序排序,然后按數字降序排序,該數組如下所示:
[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]
如果您始終只有一個字母,則可以按數字 rest 和第一個字母排序。
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);
如果你有多個字母,你可以采用正則表達式,只得到數字和非數字,分隔成 object。
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);
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.