所以我有一个问题,但不确定要如何解决。试图环顾四周,找到一个类似的问题,但没有一个对我有帮助。
基本上,在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值。我能想到的最好的是比较器功能的某种形式。有人知道这样做的好方法吗?
答案 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的最接近的最低日期值。
我首先对数据进行排序,然后过滤出具有给定日期之后的日期的条目。
如果该数组具有值,我将返回最后一个条目,它是最接近的最低值。
如果没有条目,则本质上这是某个日期在任何日期出现之前的过去,然后它将返回整个数组的最低日期。