按多列對多維數組排序
在JavaScript 中,可以使用Array.sort() 函數輕鬆實現對字串數組的排序。但是,對於多維數組,或基於多個條件排序時,需要自訂函數。
考慮具有以下結構的數組:
[publicationID][publication_name][ownderID][owner_name]
目標是對數組進行排序按owner_name,然後按publication_name,這將導致具有相同名稱的所有者被分組在一起,並且每個組別中的出版物按字母順序排序。
之前,引入了一個名為 mysortfunction 的自訂排序函數,該函數對陣列進行排序基於單一列,owner_name。若要擴充此函數以進行多列排序,可以進行以下修改:
<code class="javascript">function mysortfunction(a, b) { var o1 = a[3].toLowerCase(); var o2 = b[3].toLowerCase(); var p1 = a[1].toLowerCase(); var p2 = b[1].toLowerCase(); if (o1 < o2) return -1; if (o1 > o2) return 1; if (p1 < p2) return -1; if (p1 > p2) return 1; return 0; }</code>
在此更新的函數中:
首先,它比較擁有者名稱。如果它們不同,函數將傳回 -1 或 1 來表示哪一個應該在另一個之前。
但是,如果所有者名稱相同,則函數將繼續比較出版物名稱。在這種情況下,它會傳回 -1 或 1 來指定它們的順序。
如果兩次比較結果相等,則函數傳回 0,表示兩個元素相等並且應保留其原始順序。
透過使用這個自訂函數對數組進行排序,達到了按owner_name排序,然後按publication_name排序的目的。同名的所有者將被分組在一起,每個組內的出版物按字母順序列出。
以上是如何按多列對多維 JavaScript 陣列進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!