在 JavaScript 中按月对数据进行分组

javascriptweb developmentfront end technologyobject oriented programming

在给定的问题陈述中,我们必须按月对给定的数据进行分组。简单来说,按月分组后,数据应处于排序形式。例如,我们在数据中给出了年份和月份,因此应该按从一月到十二月的顺序显示。

众所周知,数组是存储数据的数据结构模板。我们可以根据需要操作这些数据。它可以将项目集合存储在单个数组中,并且可以执行许多操作,例如添加元素、删除元素或在数组中搜索特定元素。

让我们通过下面的示例来理解,该示例以实际方式展示了问题陈述:

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:满足条件后,它将在控制台中打印排序后的数据。

示例

// 在此处以数组形式定义数据
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'];

// 创建函数进行排序
const sortedData = (a, b) => {
    if(a.year !== b.year){
        return a.year - b.year;
    }
    else{
        // 比较每个索引处的月份
        return months.indexOf(a.month) - months.indexOf(b.month);
    };
};

// 在 javascript 中使用 sort 方法
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 方法。


相关文章