JS数组对象——根据日期进行排序Date.parse(),按照时间进行升序或降序排序localeCompare()

news2024/11/24 1:45:05

JS数组对象——根据日期对象进行排序,按照时间进行升序或降序排序

  • 场景复现
  • 封装数组对象的排序方法
  • 根据日期和时间对象排序
      • 1、按照日期时间混合排序
      • 2、分别按照日期和时间进行排序

场景复现

排序在项目中非常实用,出现频率极高,尤其是后台管理系统,需要我们对大量的数据进行展示、处理、操作。一般都是从后台获取到数组对象,然后根据其中的一个属性对数据进行升序或者降序的处理。从本期文章开始,将分别介绍常用的三种排序——根据日期排序根据中文首字母排序根据英文首字母排序。这三种排序的使用频率非常高。

下面将举例详细介绍——按日期和时间顺序进行排序

封装数组对象的排序方法

封装思想在项目中用到的非常多,封装用的好可以在很大程度上减少代码量,提高复用率。
首先我们先了解一下最简单的根据数字大小排序的排序方法封装。

// 封装数组对象排序方法
compare(prop) {
    return function(a, b) {
        return b[prop] - a[prop]  // 降序
        //  return a[prop] - b[prop]  // 升序
    }
},
// 比如arrList对象中根据score属性进行从大到小的排序
const arrList = [
  {id: 1, value : "value1", score: 97},
  {id: 2, value : "value2", score: 126, },
  {id: 3, value : "value3", score: 60, },
];
arrList = arrList.sort(arrList.compare('score'))

从大到小排序后的数据:

{id: 2, value : "value2", score: 126, },
{id: 1, value : "value1", score: 97},
{id: 3, value : "value3", score: 60, },

看完这个简单的大小排序后,我们切入正题,按照日期进行排序。

这里我们分为时间和日期混合排序(时间和日期在一个参数内)以及时间和日期分别排序(时间和日期对应两个参数

根据日期和时间对象排序

1、按照日期时间混合排序

(1)数组内容

let data = [
    {id: 2, time: '2019-04-26 10:53:19'},
	{id: 4, time: '2019-04-26 10:51:19'}, 
	{id: 1, time: '2019-04-26 11:04:32'}, 
	{id: 3, time: '2019-04-26 11:05:32'}
]

(2)利用Date.parse()对日期进行混合排序

// property是你需要排序传入的key,bol为true时是升序,false为降序
function dateData(property, bol) {
	return function(a, b) {
		var value1 = a[property];
		var value2 = b[property];
		if (bol) {
			// 升序
			return Date.parse(value1) - Date.parse(value2);
		} else {
			// 降序
			return Date.parse(value2) - Date.parse(value1)
		}
	}
}
console.log(data.sort(dateData("time", true)))
console.log(data.sort(dateData("time", false)))

控制台排序结果
在这里插入图片描述
在这里插入图片描述


下面介绍日期和时间两个参数分开排序的例子

2、分别按照日期和时间进行排序

一、升序

1、数组内容

const arr = [
  {id: 1, value : "value1", date: "2018-08-08", time: "15:27:17"},
  {id: 2, value : "value2", date: "2018-08-09", time: "12:27:17"},
  {id: 3, value : "value3", date: "2018-08-10", time: "17:27:17"},
  {id: 4, value : "value4", date: "2018-08-10", time: "01:27:17"},
  {id: 5, value : "value5", date: "2018-08-10", time: "09:27:17"},
  {id: 6, value : "value6", date: "2018-08-10", time: "23:27:17"},
  {id: 7, value : "value7", date: "2018-08-10", time: "16:27:17"},
  {id: 8, value : "value8", date: "2018-08-11", time: "10:27:17"}
];

方法sort()localeCompare()

  • sort用于排序,localeCompare用于比较
    在这里插入图片描述
    localeCompare不要写成localCompare

2、关键代码:(根据时间和日期进行排序

// 按照时间先后顺序进行排序
arr.sort((a, b) => a.date.localeCompare(b.date) || a.time.localeCompare(b.time));
console.log(arr);
// 包括了时间的比较,同时也包括了日期的比较

3、控制台排序结果
在这里插入图片描述

二、降序

降序只需要将a和b的位置交换即可,代码如下:

arr.sort((a, b) => b.date.localeCompare(a.date) || b.time.localeCompare(a.time));
console.log(arr);

控制台排序结果
在这里插入图片描述


下期文章将介绍根据中文首字母对数组对象进行排序~
感兴趣的小伙伴可以订阅本专栏,方便后续了解学习~
觉得这篇文章有用的小伙伴们可以点赞➕收藏➕关注哦~

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

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

相关文章

用javascript分类刷leetcode17.栈(图文视频讲解)

目录 Stack的特点:先进后出(FILO) 使用场景:十进制转2进制 函数调用堆栈 js里没有栈,但是可以用数组模拟 42/2 42%20 21/2 21%21 10/2 10%20 5/2 5%21 2/2 2%20 1/2 1%21 stack: [0,1,0,1,0,1] res: 1 0 1 …

VC#复习资料

一、选择题 2、“闪电”图标 3、using命名空间 命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式,using 关键字表明程序使用的是给定命名空间中的名称,使用 using 命名空间指令,这样在使用的时候就不用在前面加上命名空间名称…

golang学习

由于期末考试没时间学算法学了一波go放松一下 这可能是我学语言最认真的一次了( 跟的是尚硅谷学完的 二倍速快进 折腾了一周左右 网络编程部分没看 因为不懂计网 不想学( 虽然已经很老的课了 但是顺平老师雀氏讲的太细了也是听完了自己也没时间写笔记 …

QT5.14.2编译mysql-5.7.25 32位驱动办法

开发环境:Windows10QT5.14.2MySQL5.7.25 编译步骤: 1、下载安装mysql压缩包,下载地址为:https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.25-win32.zip 也可以打开MySQL :: Download MySQL Community Server (Archived Ve…

Electron主进程渲染进程间通信的四种方式

在electron中进程使用 ipcMain 和 ipcRenderer 模块,通过开发人员定义的“通道”传递消息来进行通信。新的版本中electron推荐使用上下文隔离渲染器进程进行通信,这种方式的好处是无需在渲染进程中直接使用ipcRenderer发送消息,这种在渲染进程…

JWT令牌入门

上篇文章我们写了如何登录,我们着重学习Token模式下的单点登录 一、访问令牌的类型 透明令牌,是客户端存储一段引用数字,然后到达服务器指向服务器中特定的令牌 类似于,cookie中存储了sessionId他们之间的关系 自包含令牌&#x…

猿代码超算实习生,五步助力拿到高薪offer

虽说行行出状元,但是一旦入错行,那就是一辈子的事。互联网的潮水已经退去,普通人再进入也只是勉强温饱。与其朝不保夕的被裁员,倒不如提前锁定未来30年的幸福。 20大以来,芯片国产化、超算(先进计算&#…

docker的run,cmd,entrypoint分析和对比

写在前面 本文一起看下Dockerfile中经常用到的几个类似命令,RUN,CMD,ENTRYPOINT。 1:容器是怎么来的? 想要有容器我们就必须先创建镜像,而想要有镜像,我们则必须写一个用来描述想要创建的镜像…

Struts2基本架构

Struts2基本架构1、Struts2执行流程2、web.xml配置3、Action控制器3.1、核心控制器3.2、业务控制器4、Result配置5、struts.xml核心配置5.1、constant元素5.2、package元素5.3、配置文件加载顺序1、Struts2执行流程 如下例子: 执行流程如下: 浏览器将请…

Python Flask开发笔记

Python Flask开发笔记一、创建flask项目1.开发环境:2.安装Flask3.使用pycharm,创建flask项目二、flask介绍1.介绍初始flask主程序接口文件2.Flask() 类1.Flask参数解释0.sys.modules用于缓存程序导入模块名1.import_name 主程序模块名2.static_url_path …

IconJar - Mac 上的一款多功能图标素材管理工具

IconJar - Mac 上的一款多功能图标素材管理工具 IconJar 是一个多功能的图标管理工具,由世界各地的设计师和开发人员使用。在一个应用程序中搜索、组织、预览和检索图标,而不是创建大量的文件夹来存储你的收藏。这款应用针对黑暗模式进行了优化&#xff…

2022年自动化测试工具汇总——实用的功能测试工具篇

如今,UI自动化测试工具就和雨后春笋般,层出不穷。由于每种工具都有自己的重点和策略,所以总是让人无从下手。今天我们来对比现在使用比较广泛的几个UI自动化测试工具,来看看他们之间的优缺点。 首先,我们先简单介绍一下…

4.6.4、边界网关 BGP 的基本工作原理

1、力求寻找较好的路由 因特网采用分层次的路由选择协议 内部网关协议(例如:路由信息协议 RIP 或开放最短路径优先 OSPF) 它们都是设法使分组在一个自治系统内尽可能有效地从源网络传输到目的网络无需考虑自治系统外部其他方面的策略 外部…

内网渗透-src挖掘-外网打点到内网渗透-3层内网渗透测试记录-2023年1月

1、通过信息搜集,发现目标有一个外网访问的通达OA系统 2、通达OA的漏洞是非常多的,这里利用大佬写好的通达OA一键getshell工具 成功获取webshell 3、连接webshell,上传cs马儿到服务器 4、执行获取主机权限 成功上线 5、通过Ladon插件发…

百分之80新手都不知道,SEO搜索引擎优化【sitemap网站地图 配置】

Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页。最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等&am…

浅析oauth2.0及应用场景

讲OAuth2.0之前,我们先理解一个概念,授权用户和资源权限的概念授权用户:用户访问某个应用系统,该应用系统请求认证中心授权以获取这个登录用户的信息,但并没有得到这个用户的密码,这个就是OAuth2.0实现的要…

N个点,求距离最近的两个点---分治策略(1)

设平面有n个点的直角坐标是,i 1, 2, ...,n,求距离最近的2个点,距离计算: 首先这个问题是可以使用蛮力算法,一共n(n-1)/2个点对,每对点对计算需要常数的时间,蛮力算法需要的时间。 由于点对有二维的空间坐标&#xf…

(三十)Vue之回顾本地存储webStorage

文章目录webStorageLocalStoragesessionStorage改造TodoList案例为本地存储Vue学习目录 上一篇:(二十九)Vue之组件化编码流程 下一篇:(三十一)Vue之自定义事件 webStorage 使用HTML5可以在本地存储用户…

Python基础(二十二):文件操作

文章目录 文件操作 一、文件操作的作用 二、文件的基本操作 1、文件操作步骤

同时开启的revit模型和navisworks如何同步呢?

一、 Navisworks与Revit同步问题 同时开启的revit模型和同时开启的navisworks如何同步呢? 1.如图1所示打开了一个revit模型 将模型保存在指定的路径上,然后通过直接拖拽的方式在navisworks manage打开模型文件,过程中会出现读条状态,如图2所…