簡體   English   中英

Javascript - 使用可變長度的 arrays 排序

[英]Javascript - sort by with arrays of variable length

假設我有一個按多個分數排序的選項數組,並且這些分數是一個可變長度的數組

[
  #[Label, scores]
  ["Label6", [1]
  ["Label5", [1,5]
  ["Label2", [0,1,3,5],
  ["Label1", [0,1,2]
  ["Label3", [0,1,4],
  ["Label4", [1,4]
]

我想通過一一評估數組元素來對這個列表進行排序。 IE。 我會先按score[0]排序(升序),如果存在score[i+1]則以此類推。當score[i]不存在時,應該認為是無限值(出現在底部)

這可以在先前的數據上給出以下 output :

list = [
  #[Label, scores]
  ["Label1", [0,1,2]  
  ["Label2", [0,1,3,5],
  ["Label3", [0,1,4],
  ["Label4", [1,4]
  ["Label5", [1,5]
  ["Label6", [1]
]

我該如何寫這個 function? 是否有像我們在其他語言中一樣的本機/ES6(或 lodash/下划線) sortBy() function? (例如在 Ruby 中,您只需list.sort_by(&:last)即可獲得此效果)。 還是需要手動實現?

您可以使用 arrays,並按相同的索引值排序。

在開始時將 arrays 的最小長度作為迭代值的長度並防止采用undefined

如果同一索引的兩個值的 delta 不為零,則返回 delta,否則繼續下一個索引。

如果訪問了所有索引而沒有先前的返回,則同一索引處的所有值都相等,直到 arrays 的最小長度。 在這種情況下,以切換順序返回兩者長度的增量,因為較長的數組應該排在第一位。

 var array = [["Label6", [1, 5]], ["Label2", [0, 1, 3, 5]], ["Label1", [0, 1, 2]], ["Label3", [0, 1, 4]], ["Label5", [1, 5, 2]], ["Label4", [1, 4]]]; array.sort(([, a], [, b]) => { var delta, index = 0, length = Math.min(a.length, b.length); while (index < length) { delta = a[index] - b[index]; if (delta) return delta; index++; } return b.length - a.length; }); console.log(array);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

array.sort() function,它采用排序算法並根據該算法對數組進行排序。 您所要做的就是僅對 2 個 arguments 進行排序。

這是我在你的情況下會做的:

list.sort( list1, list2 => {
  let i = 0, iterations = min(list1.length, list2.length);
  for( i = 0; i<iterations; i++ ){
    if( list1[i] < list2[i] ) return -1;
    if( list1[i] > list2[i] ) return 1;
  }
  if( list1.length === list2.length ) return 0;
  if( i === list1.length ) return -1;
  if( i === list2.length ) return 1;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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