簡體   English   中英

Javascript 排序混合字母數字數組 - 字母升序,數字降序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM