在JavaScript结构中查找最接近的最低日期

时间:2019-05-10 13:31:20

标签: javascript date structure

所以我有一个问题,但不确定要如何解决。试图环顾四周,找到一个类似的问题,但没有一个对我有帮助。

基本上,在javascript中,我得到了一个嵌套结构,其中包含ID,其中包含一个或多个日期,每个日期都包含一个值。

我有ID,并且有一个可能与可用日期不匹配的任意日期。我想做的是找到与给定ID匹配的最接近的最低日期。

结构示例:

ID123
    2007-09-02
        ACTIVATED
    2019-09-07
        INACTIVATED
    2019-09-09
        REACTIVATED

给出ID ID123和日期2019-08-01,我想访问2007-09-02来查找ACTIVATED值。我能想到的最好的是比较器功能的某种形式。有人知道这样做的好方法吗?

1 个答案:

答案 0 :(得分:0)

JSFiddle,其中包含数据集示例:https://jsfiddle.net/esaqz9n3/2/

代码

var arrayOfData = [
  {
    id: 123,
    data: [ 
    {
      date: '2019-09-07',
      value: "123 - middle date"
    }, 
    {
      date: '2019-09-09',
      value: "123 - latest date"
    },
    {
      date: '2007-09-02',
      value: "123 - earliest date"
    }]
  },
  {
    id: 234,
    data: [
    {
      date: '2008-07-08',
      value: "234 - earliest date"
    }, 
    {
      date: '2009-06-02',
      value: "234 - middle date"
    }, 
    {
      date: '2009-07-03',
      value: "234 - latest date"
    }]
  }
];

 var value = getClosetLowestDateValue(123, '2010-05-01');
console.log(value);
value = getClosetLowestDateValue(123, '2001-05-01');
console.log(value);
value = getClosetLowestDateValue(123, '2019-09-08');
console.log(value);

value = getClosetLowestDateValue(234, '2009-06-28');
console.log(value);
value = getClosetLowestDateValue(234, '2001-05-01');
console.log(value);
value = getClosetLowestDateValue(234, '2020-05-01');
console.log(value); 

function getClosetLowestDateValue(id, date) {
    var obj = arrayOfData.find(function(a) { return a.id == id });

  var orderedData = obj.data.sort(function(a,b) {
    return new Date(a.date) - new Date(b.date);
    });

  var dataWithoutDatesAfterDate = orderedData.filter(function (d){
    return new Date(d.date) <= new Date(date);
  });

  if(dataWithoutDatesAfterDate.length > 0) {
    return dataWithoutDatesAfterDate[dataWithoutDatesAfterDate.length - 1].value;
  }

  return orderedData[0].value;
}

说明

我用两个具有不同ID的对象创建一个数据集。每个数据都有其自己的数据数组,其中包含日期和值字段。

然后我创建一个函数,该函数返回给定ID的最接近的最低日期值。

我首先对数据进行排序,然后过滤出具有给定日期之后的日期的条目。

如果该数组具有值,我将返回最后一个条目,它是最接近的最低值。

如果没有条目,则本质上这是某个日期在任何日期出现之前的过去,然后它将返回整个数组的最低日期。