首页 > 解决方案 > 从日期属性中具有最新值的数组中获取对象?

问题描述

我想从日期属性中具有最新/最大值的数组中获取对象。有没有很好的方法来做到这一点?

[
  {
    "Address": 25,
    "AlertType": 1,
    "Area": "North",
    "Date": "2019-02-01T00:01:01.001Z",
    "Value": -1
  },
  {
    "Address": 26,
    "AlertType": 1,
    "Area": "West",
    "Date": "2016-04-12T15:13:11.733Z",
    "Value": -1
  },
  {
    "Address": 25,
    "AlertType": 1,
    "Area": "North",
    "Date": "2017-02-01T00:01:01.001Z",
    "Value": -1
  }
          .
          .
          .
]

标签: javascriptarrays

解决方案


使用减少 (O(n)):

var data = [{    "Address": 25,    "AlertType": 1,    "Area": "North",    "Date": "2019-02-01T00:01:01.001Z",    "Value": -1  },  {    "Address": 26,    "AlertType": 1,    "Area": "West",    "Date": "2016-04-12T15:13:11.733Z",    "Value": -1  },  {    "Address": 25,    "AlertType": 1,    "Area": "North",    "Date": "2017-02-01T00:01:01.001Z",    "Value": -1  }]

console.log(
  data.reduce((a,b)=>new Date(a.Date).getTime() > new Date(b.Date).getTime()? a : b, {})
)


排序(O(n log n)):

var data = [{    "Address": 25,    "AlertType": 1,    "Area": "North",    "Date": "2019-02-01T00:01:01.001Z",    "Value": -1  },  {    "Address": 26,    "AlertType": 1,    "Area": "West",    "Date": "2016-04-12T15:13:11.733Z",    "Value": -1  },  {    "Address": 25,    "AlertType": 1,    "Area": "North",    "Date": "2017-02-01T00:01:01.001Z",    "Value": -1  }]

console.log(
  data.sort((a,b)=>new Date(b.Date).getTime() - new Date(a.Date).getTime())[0]
)


推荐阅读