如何在 JavaScript 中根據巢狀陣列的長度對物件陣列進行排序


這個問題陳述的意思是,根據物件中巢狀陣列的長度對物件陣列進行排序。例如,如果第一個巢狀陣列有 3 個元素,第二個陣列有 2 個元素,那麼將第二個陣列放在第一位,第一個陣列放在第二個索引處。

理解問題

根據巢狀陣列的大小對物件陣列進行排序是我們給出的任務。例如,假設我們有一個物件陣列,其中每個物件都有一個 name 屬性和一個 hobbies 屬性,hobbies 屬性是一個字串陣列,表示該個人的愛好。目標是按這種方式排列此陣列中的專案,使愛好陣列最短的物件位於排序陣列的頂部,愛好陣列最長的物件位於底部。

我們需要開發一個特殊的比較方法來解決此問題,該方法比較兩個物件的 hobbies 陣列長度,並返回一個值,指示哪個物件應該在排序陣列中排在前面。然後,可以透過在陣列上呼叫 sort() 方法並將此自定義比較函式作為輸入傳遞來根據 hobbies 陣列的長度對陣列進行排序。現在可以在控制檯上看到排序後的陣列。

演算法

下面提供的演算法將提供解決問題的分步過程。

步驟 1:在此步驟中,使用巢狀陣列定義一個專案陣列。

步驟 2:建立比較函式並新增 sort() 方法。

步驟 3:在比較方法內部,使用每個物件的 length 屬性來比較兩個物件的巢狀陣列的長度。

步驟 4:如果第一個專案的巢狀陣列的長度小於第二個物件的長度,則返回 -1 以指示第一個專案應該出現在排序陣列中的第二個專案之前。

步驟 5:如果第一個專案的巢狀陣列的長度大於第二個物件的長度,則返回 1 以指示第二個物件應該出現在排序陣列中的第一個物件之前。

步驟 6:返回 0 以說明如果兩個專案的巢狀陣列的長度相等,則它們在排序陣列中的位置不應該改變。

步驟 7:使用 console.log() 方法在控制檯上顯示排序後的陣列。

示例

// define a function to check power of 3
const data = [
   { name: "John", hobbies: ["Reading", "dancing"] },
  { name: "Jane", hobbies: ["Cycling", "Singing", "Drawing"] },
  { name: "Bob", hobbies: ["Swimming"] },
  { name: "Alice", hobbies: [] }
];

// define sort method here
data.sort((a, b) => a.hobbies.length - b.hobbies.length);

console.log(data);

上面程式碼的另一種寫法

// define a function to check power of 3
const data = [
   { name: "John", hobbies: ["Reading", "dancing"] },
  { name: "Jane", hobbies: ["Cycling", "Singing", "Drawing"] },
  { name: "Bob", hobbies: ["Swimming"] },
  { name: "Alice", hobbies: [] }
];

// define sort method here
data.sort((a, b) => {
  if (a.hobbies.length < b.hobbies.length) {
   return -1;
  }
  if (a.hobbies.length > b.hobbies.length) {
   return 1;
  }
  return 0;
});
console.log(data);

輸出

[
  { name: 'Alice', hobbies: [] },
  { name: 'Bob', hobbies: [ 'Swimming' ] },
  { name: 'John', hobbies: [ 'Reading', 'dancing' ] },
  { name: 'Jane', hobbies: [ 'Cycling', 'Singing', 'Drawing' ] }
]

在此程式中,sort() 方法與比較函式一起在建立的物件(帶有巢狀陣列)的陣列上呼叫。比較函式比較兩個物件 a 和 b 的 hobbies 陣列的長度。如果 a 的 hobbies 陣列的長度小於 b 的 hobbies 陣列的長度,則 a 出現在排序陣列中的 b 之前。如果 a 的 hobbies 陣列的長度大於 b 的 hobbies 陣列的長度,則 b 出現在排序陣列中的 a 之前。如果 a 和 b 的 hobbies 陣列的長度相等,則它們在排序陣列中的順序不會改變。接下來,排序後的陣列記錄在控制檯上。

時間複雜度

JavaScript 中的 sort() 方法具有 O(n * log n) 的時間複雜度,其中 n 是陣列中的總條目數。由於在此場景中使用 sort() 函式對具有巢狀陣列的物件陣列進行排序,因此時間複雜度可能會根據巢狀陣列的大小而有所不同。

由於它對每次比較執行固定數量的操作,因此 sort() 方法的比較函式具有 O(1) 的時間複雜度。因此,假設巢狀陣列的長度可以忽略不計,並且對 sort() 方法的效率影響很小,則此程式的總體時間複雜度為 O(n * log n)。

結論

在本文中,我們現在已經介紹瞭如何在 JavaScript 中根據巢狀陣列的大小對專案陣列進行排序。這項工作是使用兩種不同的方法完成的,這兩種方法都使用 sort() 技術以及一個比較函式來評估巢狀陣列的長度。比較函式的時間複雜度為 O(1),而 sort() 方法的時間複雜度為 O(n * log n)。巢狀陣列的大小可能會影響程式的效能,但兩種方法對於中小型陣列都非常有效。

更新於:2023-08-18

2K+ 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告