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 一定等于 b
  return 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)

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东成2022

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值