首页 > 解决方案 > 使用多个日期属性对对象数组进行排序

问题描述

我有这个对象数组:

[
  {
    id: 1,
    timestamp1: Date,
    timestamp2: Date,
    timestamp3: Date
 },
 {
    id: 2,
    timestamp1: Date,
    timestamp2: Date,
    timestamp3: Date
 }.
 ...
]

我想按最新日期对数组进行排序,比较所有 3 个对象属性并为每个对象使用最新的。

提前给你加油。

标签: javascriptreactjs

解决方案


通过查看 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))


推荐阅读