javascript - 使用多个日期属性对对象数组进行排序
问题描述
我有这个对象数组:
[
{
id: 1,
timestamp1: Date,
timestamp2: Date,
timestamp3: Date
},
{
id: 2,
timestamp1: Date,
timestamp2: Date,
timestamp3: Date
}.
...
]
我想按最新日期对数组进行排序,比较所有 3 个对象属性并为每个对象使用最新的。
提前给你加油。
解决方案
通过查看 jssort
文档,您会看到 sort 将函数作为参数:
- 如果第一个对象大于第二个对象,则返回一个正整数
- 如果两个对象相同,则返回0
- 如果第一个对象小于第二个对象,则返回一个负整数。
知道了,让我们一起构建函数:
首先,我们想获得对象的最高日期。
为此,我建议使用Math.max,它接受一个数组并返回最大的参数。
在这里它有效,因为 js 将日期理解为整数。
function highestDate(obj){
return Math.max(obj.timestamp1,obj.timestamp2,obj.timestamp3)
}
现在让我们构建排序功能。
function compare(a,b){
return highestDate(b) - highestDate(a)
}
这是一个用于测试的狙击手:
function highestDate(obj){
return Math.max(obj.timestamp1,obj.timestamp2,obj.timestamp3)
}
function compare(a,b){
return highestDate(b) - highestDate(a)
}
let obj1={
id:1,
timestamp1 : new Date(2001,1,1),
timestamp2 : new Date(2002,1,1),
timestamp3 : new Date(2003,1,1) //third highest date
}
let obj2={
id:2,
timestamp1 : new Date(1997,1,1),
timestamp2 : new Date(2004,1,1),//second highest date
timestamp3 : new Date(2003,1,1)
}
let obj3={
id:3,
timestamp1 : new Date(1991,1,1),
timestamp2 : new Date(2001,1,1),
timestamp3 : new Date(2005,1,1) //highest date
}
let arr = [obj1,obj2,obj3]
console.log(arr.sort(compare))
推荐阅读
- node.js - 如何将字符串拆分为数对?
- timber - 在 Timber $context['posts'] 对象中操作帖子顺序
- json - 使用带有 AJAX 表单的 Django 更新模型值的最简单方法
- java - 如何解决由于多线程而将对象两次添加到 Set 的问题?
- php - Laravel 队列推送监听器 - 队列监控
- python - 为什么 pip install 不适用于 catboost?
- javascript - 清除匿名 setInterval
- amazon-web-services - 限制子句不适用于包含 json 数组的 Amazon S3 文件
- firebase - 如何在没有身份验证的情况下保护数据库?
- laravel - 更新除一个字段外的所有字段