JavaScript 中根據兩個屬性對物件陣列進行排序


給定問題要求根據兩個屬性對給定的物件陣列進行排序,並用 JavaScript 建立一個程式。

理解問題

讓我們深入瞭解一下問題陳述。您將獲得一個包含鍵值對的物件陣列。根據問題陳述,我們需要該陣列的排序形式。為了實現此問題,我們將首先對陣列的第一列進行排序,然後對陣列的第二列進行排序。然後再次將其排列成排序形式。

正如我們所知,陣列是計算機科學中的基本資料結構。陣列也可以是物件的集合,這些物件可以是鍵值對。其中鍵將定義陣列中值的型別。因此,藉助鍵,我們可以訪問它並執行排序操作。

在我們的專案中,我們將用兩種方法解決這個問題。

演算法 - 第一種方法

步驟 1:在理解邏輯之前,首先定義一個包含物件的陣列。陣列是程式的初始點,因此首先了解我們將要使用的陣列。在我們的第一個程式中,陣列的名稱將為 details,此處 name 和 age 被定義為鍵及其值。

步驟 2:此步驟將對定義的陣列執行排序操作。在此步驟中,排序後的資料將傳遞給 afterSorting 變數。在最後一步,我們將使用 afterSorting 列印結果。

步驟 3:此步驟將遍歷多個 if 語句。在第一行,它將檢查 name 的前兩個值,如果第一個值小於第二個值,則返回 -1,在第二行,它將檢查與第一行完全相反的內容。

步驟 4:此步驟也將執行多個 if 語句並檢查 age 的值。如果 age 的第一個值小於第二個值,則返回 -1,否則返回 1。

步驟 5:此步驟將返回更新後的排序後的物件陣列的值。

示例

//define array
const details = [
  { name: 'Preeti', age: 25 },
  { name: 'Aman', age: 30 },
  { name: 'Shekhar', age: 20 },
  { name: 'Preeti', age: 25 },
  { name: 'Aman', age: 25 },
  { name: 'Anjali', age: 22 },
  { name: 'Kajal', age: 28 },
  { name: 'Anjali', age: 22 },
  { name: 'Shekhar', age: 20 },
];

const afterSorting = details.sort((first, second) => {
  if (first.name < second.name) return -1;
  if (first.name > second.name) return 1;
   if (first.age < second.age) return -1;
  if (first.age > second.age) return 1;
  return 0;
});

console.log(afterSorting);

輸出

[
  { name: 'Aman', age: 25 },
  { name: 'Aman', age: 30 },
  { name: 'Anjali', age: 22 },
  { name: 'Anjali', age: 22 },
  { name: 'Kajal', age: 28 },
  { name: 'Preeti', age: 25 },
  { name: 'Preeti', age: 25 },
  { name: 'Shekhar', age: 20 },
  { name: 'Shekhar', age: 20 }
]

演算法 - 第二種方法

此方法在編碼和語法方面與上述方法略有不同。

步驟 1:在初始步驟中,我們需要定義一個數組。在我們的例子中,我們有一個名為 languages 的陣列,其中我們定義了兩個屬性:name 和 difficulty。因此,此資料是不言自明的。

步驟 2:這是我們程式中邏輯的第一步。我們在 const 中定義了一個名為 sortedArray 的變數。此函式獲取要排序的資料並將其結果陣列儲存在其中。然後,我們建立了 if else 語句來根據程式要求檢查條件。

示例

// define array named languages with name and difficulty 
const languages = [
   {name: "Python", difficulty: "Easy"},
   {name: "Java", difficulty: "Tough"},
   {name: "Javascript", difficulty: "Medium"},
   {name: "Javascript", difficulty: "Average"},
   {name: "Python", difficulty: "moderate"},
   {name: "HTML", difficulty: "Easy"},
   {name: "CSS", difficulty: "Medium"},
   {name: "HTML", difficulty: "Effortless"}];

const sortedArray = languages.sort((a, b)=> {
  if (a.name === b.name){
   return a.difficulty < b.difficulty ? -1 : 1
  } else {
   return a.name < b.name ? -1 : 1
  }
})

console.log("Array of objects after sorting");
console.log(sortedArray);

輸出

Sort Array of objects by two properties
[
  { name: 'CSS', difficulty: 'Medium' },
  { name: 'HTML', difficulty: 'Easy' },
  { name: 'HTML', difficulty: 'Effortless' },
  { name: 'Java', difficulty: 'Tough' },
  { name: 'Javascript', difficulty: 'Average' },
  { name: 'Javascript', difficulty: 'Medium' },
  { name: 'Python', difficulty: 'Easy' },
  { name: 'Python', difficulty: 'moderate' }
]

複雜度

在上述演算法中,我們最初使用了 Javascript 的 sort 方法,該方法需要 O(n) 時間來對長度為 n 的物件進行排序,然後是 if 條件,這些條件又需要最多物件長度的時間來對物件進行排序。因此,在將兩者相加後:O(n) + O(n) = O(2n)。在 O(2n) 中,2 是常數,在複雜度中,常數無關緊要,因此結果將為 O(n) 時間。佔用的空間複雜度為 O(n)。

結論

這就是我們如何解決給定問題的方法,邏輯思維是獲得解決任何問題思路的關鍵。在編碼的背景下,從針對特定問題陳述(對物件陣列進行排序)的簡單的 javascript 一行排序方法開始。

更新於:2023 年 8 月 18 日

2K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.