当前位置: 首页 > news >正文

js通过时间对JSON中的数据进行排序

需求

现在需要通过每一个数据段的date字段对数组的整体数据进行排序!

元数据如下:

var data = [{"filename": "123","date": "2024-05-10 19:53:57","stand": "GB-14","filter": "Gauss","ys": 0.008,"yc": 0.8,"data": [23,23,23]},{"filename": "17112","date": "2024-05-10 19:54:49","stand": "GB-14","filter": "Gauss","ys": 0.008,"yc": 0.8,"data": [65535,65535,65535]},{"filename": "556","date": "2024-05-10 19:55:51","stand": "GB-14","filter": "Gauss","ys": 0.008,"yc": 0.8,"data": [2,85,118]}
]

 Array.prototype.sort()

这里我们采用Array.prototype.sort()

Array.prototype.sort()默认排序是将元素转换为字符串,然后按照它们的 UTF-16 码元值升序排序。

语法

1、sort()

2、sort(compareFn)

compareFn:(可选)定义排序顺序的函数。返回值应该是一个数字,其符号表示两个元素的相对顺序:

如果 a 小于 b,返回值为负数,如果 a 大于 b,返回值为正数,如果两个元素相等,返回值为 0。NaN 被视为 0。该函数使用以下参数调用:        
        a
        第一个用于比较的元素。不会是 undefined。        
        b
        第二个用于比较的元素。不会是 undefined。

返回值

经过排序的原始数组的引用。注意数组是就地排序的,不会进行复制。

compareFn(a, b) 返回值排序顺序
> 0a 在 b 后,如 [b, a]
< 0a 在 b 前,如 [a, b]
=== 0保持 a 和 b 原来的顺序

所以,比较函数形式如下:

function compareFn(a, b) {if (根据排序标准,a 小于 b) {return -1;}if (根据排序标准,a 大于 b) {return 1;}// a 一定等于 breturn 0;
}

更正式地说,为了确保正确的排序行为,比较函数应具有以下属性:

  • 纯函数:比较函数不会改变被比较的对象或任何外部状态。(这很重要,因为无法保证比较函数将在何时以及如何调用,因此任何特定的调用都不应对外部产生可见的效果。)
  • 稳定性:比较函数对于相同的输入对应始终返回相同的结果。
  • 自反性compareFn(a, a) === 0
  • 反对称性compareFn(a, b) 和 compareFn(b, a) 必须都是 0 或者具有相反的符号。
  • 传递性:如果 compareFn(a, b) 和 compareFn(b, c) 都是正数、零或负数,则 compareFn(a, c) 的符号与前面两个相同。

符合上述限制的比较函数将始终能够返回 10 和 -1 中的任意一个,或者始终返回 0。例如,如果比较函数只返回 1 和 0,或者只返回 0 和 -1,它将无法可靠地排序,因为反对称性被破坏了。一个总是返回 0 的比较函数将不会改变数组,但仍然是可靠的。

解决需求

代码如下:

sortByDate(attr, rev){if (rev == undefined){rev=1}else{(rev)?1:-1}return function(a,b){a = a[attr]b = b[attr]if (a<b){return rev*-1}if (a>b){return rev*1}return 0}
}// attr:根据该属性排序;
// rev:升序1或降序-1,不填则默认为1
data. Sort(sortByDate('date',-1))console.log(data)

http://www.lryc.cn/news/347687.html

相关文章:

  • leetcode206-Reverse Linked List
  • 云计算第十二课
  • 【elasticsearch】慢查询替代查询审计的尝试
  • 腐烂的橘子BFS
  • 什么是分库分表
  • pytest并发执行用例方案
  • VO,PO,DTO
  • Java设计模式-工厂
  • 【JavaEE】【1.3 Servlet】1.3.6 监听
  • C#泛型委托
  • 从零开始精通RTSP之多播传输
  • (五)STM32F407 cubemx IIC驱动OLED(2)硬件篇
  • 头歌实践教学平台:CG1-v1.0-点和直线的绘制
  • java基础之面向对象的思想
  • 红黑树的理解和简单实现
  • 发表博客之:gemm/threadblock/threadblock_swizzle.h 文件夹讲解,cutlass深入讲解
  • 【C语言项目】贪吃蛇(下)
  • 【Unity实战|热更】Addressable读取SO文件报错解决
  • Web自动化 - selenium
  • 基于select for update 实现数据库分布式锁
  • Java后端实现对象与文件接收数据(minio测试)
  • 考研踩坑经验分享
  • Android Compose 一:基础控件
  • python3.12.0 在Linux 制作镜像包 部署到docker 全过程
  • STM32理论 —— μCOS-Ⅲ(新)
  • 衢州知识付费系统报价,教师如何做精品课程?怎么创造精品课程?
  • 在Vue中,可以通过使用<slot>元素和name属性来创建具名插槽。这样您就可以为一个组件的不同部分定义不同的内容。 以下是一个简单的示例:
  • C++笔试强训day19
  • MySQL软件安装基于压缩包
  • 04 贝尔曼最优公式