typescript对包含时间的结构体排序

引言

在鸿蒙开发中常常需要对结构体数据源按照某种顺序进行排序,该文章旨在给包含时间的数据源进行排序,其中主要涉及到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 (中国标准时间)

日期对象方法

SNMethodDescription
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" 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/35112.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024NIPS | 在目标引导下利用强化学习范式进行图像冲印调优

文章标题&#xff1a;Goal Conditioned Reinforcement Learning for Photo Finishing Tuning 原文链接&#xff1a;RLPixTuner 本文是上海AI Lab联合香港中文大学&#xff08;薛天帆等人&#xff09;发表在2024NIPS上的论文。 1. Abstract 图像冲印调优旨在自动化对图像冲印管…

【Spring】Cookie与Session

一、Cookie是什么&#xff1f; Cookie的存在主要是为了解决HTTP协议的无状态性问题&#xff0c;即协议本身无法记住用户之前的操作。 “状态” 的含义指的是: 默认情况下 HTTP 协议的客端和服务器之间的这次通信&#xff0c;和下次通信之间没有直接的联系 但是实际开发中&…

【最新】linux安装docker并配置加速源

我这边之前本地创建了个虚拟机&#xff0c;linux系统的&#xff0c;用于部署服务器。有时安装一些常用工具或者中间件&#xff0c;还是用docker安装方便&#xff0c;而且docker还有编排服务等功能&#xff0c;实际使用中还是会省不少事的&#xff0c;这里记录下安装docker的过程…

SpringBoot动态配置Nacos

重要知识点 Nacos属性的简单使用将SpringBoot中的所有配置全部放入到Nacos中开发人创建单独的命名空间,修改互不影响Nacos经常变动的配置抽离到外部文件中 将项目中的所有配置全部放到到 1. 首先引入包 <!-- nacos 接入--><!-- https://mvnrepository.com/artifact…

【每天一篇深度学习论文】轻量化自适应提取模块LAE

目录 论文介绍题目&#xff1a;论文地址&#xff1a; 创新点方法模型总体架构核心模块描述1. 轻量级自适应提取&#xff08;LAE&#xff09;模块&#xff1a;2. 多路径旁路特征匹配&#xff08;MSFM&#xff09;模块&#xff1a;3. RFABlock&#xff08;感受野注意力卷积&#…

Linux中文件操作

文件由文件内容和文件属性构成&#xff0c;因此对文件的操作就是对文件内容或文件属性的操作。所谓的“打开一个文件”就是将文件的属性或内容加载到内存中&#xff0c;而没有被打开的文件存在于磁盘上。打开的文件称作“内存文件”&#xff0c;未被打开的文件称作“磁盘文件”…

hhdb数据库介绍(10-42)

安全 SQL防火墙 管理平台提供的SQL防火墙功能可为用户拦截高危SQL、误操作SQL等&#xff0c;提升系统安全性。 同时防火墙提供观测功能&#xff0c;可在开启新规则前&#xff0c;通过开启观测状态&#xff0c;判断新规则对业务的影响程度。开启观测状态后&#xff0c;计算节…

白嫖VMware ESXi 8.0 U3新功能Live Patch、无需重启零中断修复漏洞

哈喽大家好&#xff0c;欢迎来到虚拟化时代君&#xff08;XNHCYL&#xff09;&#xff0c;收不到通知请将我点击星标&#xff01;“ 大家好&#xff0c;我是虚拟化时代君&#xff0c;一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…

JavaSE学习心得(API与算法篇)

常用API和常见算法 前言 常用API Math System Runtime Object ​编辑浅克隆 深克隆 Objects Biginteger 构造方法 成员方法 底层存储方式 Bigdecimal 构造方法 Bigdecimal的使用 底层存储方式 ​编辑正则表达式 两个判断练习 两个爬取练习 贪婪爬取和非贪…

如何开发高效的企业内训APP?教育培训系统源码搭建实战详解

本篇文章&#xff0c;小编将从教育培训系统的源码搭建、功能设计以及技术实现等方面&#xff0c;详细探讨如何开发一款高效的企业内训APP。 一、企业内训APP的需求分析 在开发企业内训APP之前&#xff0c;首先需要明确其基本需求。一个高效的企业内训APP应该具备以下几个核心…

解释器模式的理解和实践

引言 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;它在软件工程中用得相对较少&#xff0c;但在某些特定场景下非常有用。解释器模式提供了一种解释语言的语法或表达式的方式&#xff0c;它定义了一个表达式接口&#xff0c;并通过…

Z029 PHP+MYSQL+LW+饭店预订管理系统的设计与实现 源代码 配置 文档

饭店预订管理系统 1.项目描述2. 开发背景与意义3.项目功能结构4.界面展示5.源码获取 1.项目描述 近几年来&#xff0c;我国计算机信息技术发展迅速&#xff0c;各种各样的信息管理系统层出不穷。互联网电子商务的热潮&#xff0c;改变了人们生活习惯&#xff0c;而作为城市经济…

【力扣热题100】—— Day5.回文链表

正视自己的懦弱和无能&#xff0c;克服自己的嫉妒与不甘 —— 24.12.3 234. 回文链表 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a…

什么是大数据、有什么用以及学习内容

目录 1.什么是大数据&#xff1f; 1.1大数据的类型 1.2大数据的来源 1.3大数据处理的挑战 1.4大数据的核心技术 2.大数据有什么用&#xff1f; 2.1商业与营销&#xff1a; 2.2医疗与健康&#xff1a; 2.3金融服务&#xff1a; 2.4政府与公共服务&#xff1a; 2.5交通…

Docker 安装 中文版 GitLab

Docker 安装系列 安装GitLab、解决服务器内存不足问题、使用域名/IP地址访问项目 1、拉取 [rootTseng ~]# docker pull twang2218/gitlab-ce-zh:latest latest: Pulling from twang2218/gitlab-ce-zh 8ee29e426c26: Pull complete 6e83b260b73b: Pull complete e26b65fd11…

分布式数据库环境(HBase分布式数据库)的搭建与配置

分布式数据库环境&#xff08;HBase分布式数据库&#xff09;的搭建与配置 1. VMWare安装CentOS7.9.20091.1 下载 CentOS7.9.2009 映像文件1.2启动 VMware WorkstationPro&#xff0c;点击“创建新的虚拟机”1.3在新建虚拟机向导界面选择“典型&#xff08;推荐&#xff09;”1…

ssh连接工具

我们未来接触到的linux系统一般情况下是没有界面&#xff08;桌面环境&#xff09;&#xff0c;我们一般会在自己工作的电脑上&#xff0c;通过相关ssh工具&#xff0c;利用网络连接到远程的你的服务器上。连接工具有很多&#xff1a;mobaxterm、xshell/xftp、putty等等 mobaxt…

苹果 ATS 配置SSL证书

Apple的App Transport Security (ATS) 是一项安全机制&#xff0c;旨在确保iOS和macOS应用的网络通信使用HTTPS加密。自iOS 9和OS X 10.11以来&#xff0c;默认情况下所有网络请求都必须使用HTTPS&#xff0c;除非明确允许非HTTPS连接。 在2017年1月1日之前&#xff0c;开发者可…

安卓逆向之对抗Anti-Frida学习

基础补充 什么是 Anti-Frida 保护&#xff1f; Anti-Frida保护是指在移动应用或程序中采用的一种安全技术或防护机制&#xff0c;旨在防止或干扰Frida等动态分析工具的注入与使用。 Anti-Frida保护常见技术 有哪些&#xff1f; 检测frida-agent.so的注入 &#xff1a; Fr…

安全架构评审

安全架构评审 1.概述2.安全设计原则3.美团安全架构评审模型安全需求分析架构review攻击面分析和威胁建模攻击面分析威胁列表 1.概述 完整的安全评审会包含安全架构评审、安全代码审核和安全测试三个手段 安全架构评审聚焦于探寻安全设计中的漏洞&#xff0c;以宏观视野全面考…