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()方法用于按照某个条件将数组的元素排序。当您需要按照某个特定的条件对对象数组进行排序时,可以使用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方法。