在 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 次查看

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告