引言
在鸿蒙开发中常常需要对结构体数据源按照某种顺序进行排序,该文章旨在给包含时间的数据源进行排序,其中主要涉及到typescript的sort语法,和typescript中Date数据类型的使用
正文
对数据进行升序降序排序
TypeScript 中的数组对象提供了一个 sort() 方法,可以用来对数组中的元素进行排序。sort() 方法接受一个可选的比较函数作为参数,用于自定义排序规则。
下面是一个示例,展示如何对包含数字的数组进行排序:
const numbers: number[] = [5, 2, 10, 1, 7];
numbers.sort((a, b) => a - b);
console.log(numbers); // 输出 [1, 2, 5, 7, 10]
在这个例子中,我们传入了一个比较函数 (a, b) => a - b
,它指定了按照数字的升序进行排序。如果要进行降序排序,只需将比较函数改为 (a, b) => b - a
。
对于包含对象的数组,我们可以使用类似的方法进行排序。假设我们有一个包含订阅事件和注释的对象数组,其中每个对象都有id,预约日期和注释:
定义数据类型及数据初始化
interface IBookHistoryItem{"id": string,"date": string,"comment": string
}
type IBookHistoryList=IBookHistoryItem[]
let bookHistoryList:IBookHistoryList=[{id:'1',date:'2024-10-10',comment:''
},
{id:'2',date:'2024-10-09',comment:'0909'
},
{id:'3',date:'2023-10-10',comment:''
},
{id:'4',date:'2024-11-10',comment:'99'
},
{id:'5',date:'2024-12-12',comment:'666'
}
]
定义数组的比较方式
//列表升序排序 比较函数
function compare_BookHistoryItem(a: IBookHistoryItem, b: IBookHistoryItem){if(a.date != b.date){if(a.date>b.date) return 1;else return -1;}else{return Number(a.id) - Number(b.id) ;}
}
//列表降序排序 比较函数
function compare_BookHistoryItem_desc(a: IBookHistoryItem, b: IBookHistoryItem){if(a.date != b.date){if(a.date<b.date) return 1;else return -1;}else{return Number(a.id) - Number(b.id) ;}
}
调用排序函数
//原先的数组
console.info(JSON.stringify(bookHistoryList,null,2))
//按照时间升序
bookHistoryList.sort(compare_BookHistoryItem)
console.info(JSON.stringify(bookHistoryList,null,2))
//按照时间降序
bookHistoryList.sort(compare_BookHistoryItem_desc)
console.info(JSON.stringify(bookHistoryList,null,2))
运行结果
[INF]: "[{"id": "1","date": "2024-10-10","comment": ""},{"id": "2","date": "2024-10-09","comment": "0909"},{"id": "3","date": "2023-10-10","comment": ""},{"id": "4","date": "2024-11-10","comment": "99"},{"id": "5","date": "2024-12-12","comment": "666"}
]"
[INF]: "[{"id": "3","date": "2023-10-10","comment": ""},{"id": "2","date": "2024-10-09","comment": "0909"},{"id": "1","date": "2024-10-10","comment": ""},{"id": "4","date": "2024-11-10","comment": "99"},{"id": "5","date": "2024-12-12","comment": "666"}
]"
[INF]: "[{"id": "5","date": "2024-12-12","comment": "666"},{"id": "4","date": "2024-11-10","comment": "99"},{"id": "1","date": "2024-10-10","comment": ""},{"id": "2","date": "2024-10-09","comment": "0909"},{"id": "3","date": "2023-10-10","comment": ""}
]"
恢复原始顺序
//列表升序排序 比较函数
function compare_BookHistoryItem_original(a: IBookHistoryItem, b: IBookHistoryItem){return Number(a.id) - Number(b.id) ;
}
bookHistoryList.sort(compare_BookHistoryItem_original)
console.info(JSON.stringify(bookHistoryList,null,2))
和当前的日期作比较
typescript的Date类型
Date对象代表TypeScript中的日期和时间功能。它允许我们获取或设置年份、月、日、小时、分钟、秒和毫秒。
如果我们创建一个没有传递参数的日期对象,那么默认情况下它包含用户计算机的日期和时间。
Date对象还提供了处理协调世界时(UTC时间),也称为**格林威治标准时间(GMT)**的函数。世界时间标准是基于UTC时间的。
创建日期对象
有四种创建新日期对象的方法:
其中的new Date(): 它创建一个带有当前日期和时间的新日期对象。
示例
let date: Date = new Date();
console.log("日期 = " + date); //日期 = Tue Tue Dec 01 2024 11:00:57 GMT+0800 (中国标准时间)
日期对象方法
SN | Method | Description |
---|---|---|
1. | Date() | 用于返回当前日期和时间。 |
2. | getDate() | 用于返回指定日期的本地时间的月份中的哪一天。 |
3. | getDate() | 用于返回指定日期的本地时间为周几。 |
4. | getFullYear() | 用于返回指定日期的本地时间的年份。 |
5. | getHours() | 用于返回指定日期的本地时间的小时数。 |
6. | getMilliseconds() | 用于返回指定日期的本地时间的毫秒数。 |
7. | getMinutes() | 用于返回指定日期的本地时间的分钟数。 |
8. | getMonth() | 用于返回指定日期的本地时间的月份。 |
9. | getSeconds() | 用于返回指定日期的本地时间的秒数。 |
10. | getTime() | 用于将指定日期转换为自1970年1月1日00:00:00 UTC以来的毫秒数。 |
// 获取当前日期(年-月-日)
function getCurrentYearMonthDay(): string {const date = new Date();//根据数据的格式,将获取的date转化为同一个格式const year = date.getFullYear();const month = String(date.getMonth() + 1).padStart(2, '0');const day = String(date.getDate()).padStart(2, '0');return `${year}-${month}-${day}`;
}//和当前时间作比较 只输出时间大于当前时间的
for(let i=0;i<bookHistoryList.length;i++){if(bookHistoryList[i].date>getCurrentYearMonthDay()) console.info(bookHistoryList[i].date);
}
运行结果
[INF]: "2024-12-12"