在 JavaScript 中按月對資料進行分組


在給定的問題陳述中,我們必須按月對給定的資料進行分組。簡單來說,資料在按月分組後應該以排序的形式顯示。例如,資料中給出了年份和月份,因此應該按從 1 月到 12 月的順序顯示。

眾所周知,陣列是用於儲存資料的結構模板。我們可以根據需要操作這些資料。它可以將一組專案儲存在一個數組中,並且有許多操作可以執行,例如新增元素、刪除元素或在陣列中搜索特定元素。

讓我們透過下面的示例來理解,該示例以實際的方式展示了問題陳述

const arr = [
{
   year: 2020,
   month: 'April'
}, {
   year: 2020,
   month: 'January'
}, {
   year: 2017,
   month: 'May'
}, {
   year: 2017,
   month: 'March'
}, ]

上述陣列應以如下排序形式顯示

{ year: 2017, month: 'March' },
{ year: 2017, month: 'May' },
{ year: 2020, month: 'January' },
{ year: 2020, month: 'April' }

演算法

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

例如,如果我們給定一個定義年份和月份的陣列,那麼我們應該提供如下精確的演算法

步驟 1:使用任何資料型別(let、var 或 const)宣告一個數組。

步驟 2:宣告另一個名為 months 的陣列,用於儲存所有月份。

步驟 3:建立一個名為 sortedData 的函式,該函式接受兩個引數。

步驟 4:首先檢查年份的條件,如果條件為真,則執行它,否則轉到 else 部分。

步驟 5:使用 indexOf 方法檢查 else 條件,該方法返回在陣列中找到給定元素的第一個索引,如果不存在則返回 -1。

步驟 6:比較成功後,宣告 sort 方法。sort() 方法對陣列中存在的元素進行排序。它還會覆蓋實際的陣列。

步驟 7:條件滿足後,它將在控制檯中列印排序後的資料。

示例

// define data here in array form
const data = [{ name: 'Pearl',
   year: 2020,
   month: 'January'
}, {
   name: 'John',
   year: 2017,
   month: 'March'
}, {
   name: 'Peter',
   year: 2010,
   month: 'January'
}, {
   name: 'Nick',
   year: 2010,
   month: 'December'
},{
   name: 'Angel',
   year: 2020,
   month: 'October'
}, {
   name: 'Jas',
   year: 2017,
   month: 'June'
}];

const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

// create function to sort
const sortedData = (a, b) => {
   if(a.year !== b.year){
     return a.year - b.year;
   }
   else{
     // comparison of months at each index
     return months.indexOf(a.month) - months.indexOf(b.month);
   };
};

// using sort method in javascript 
data.sort(sortedData);
console.log(data);

輸出

[
  { name: 'Peter', year: 2010, month: 'January' },
  { name: 'Nick', year: 2010, month: 'December' },
  { name: 'John', year: 2017, month: 'March' },
  { name: 'Jas', year: 2017, month: 'June' },
  { name: 'Pearl', year: 2020, month: 'January' },
  { name: 'Angel', year: 2020, month: 'October' }
]

在上面的程式碼中,我們聲明瞭一個儲存資料的陣列。另一個儲存月份的陣列。我們還聲明瞭一個名為 sortedData 的函式。它的作用是比較值並使用 sort() 方法提供有序資料。

然後我們定義了另一個 JavaScript 方法 indexOf。此方法的工作機制是在字串中返回值的索引位置。如果未找到該值,它還會返回 -1。indexOf() 方法使用駝峰命名法進行定義。

sort() 方法用於按某種順序排列陣列的元素,當您需要根據特定條件對物件陣列進行排序時。

複雜度

對於此程式,時間複雜度為 O(n log n)。這裡 n 是資料陣列中物件的數目。sort() 方法的時間複雜度為 O(n log n)。因此,我們可以說該程式的總體時間複雜度為 O(n log n)。此程式的空間複雜度為 O(n),用於儲存陣列的所有元素。

結論

這就是我們如何解決給定的問題陳述並使用 JavaScript 中預定義的 sort() 和 indexOf() 方法以排序的形式排列資料。此演算法的時間複雜度為 O(n log n)。因此,藉助此程式,您可以學習如何在 JavaScript 中使用 sort 和 indexOf 方法。

更新於: 2023年8月18日

785 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告
© . All rights reserved.