用jquery/javascript在json字符串中填充缺失的日期

用jquery/javascript在json字符串中填充缺失的日期,javascript,jquery,json,Javascript,Jquery,Json,以下是我所拥有的一个样本: [{ “probeTemp”:“35.40”, “日期探测”:“2015-08-1” }, { “probeTemp”:“34.89”, “日期探测”:“2015-08-3” }, { “probeTemp”:“34.42”, “日期探测”:“2015-08-5” }] 如何在json字符串中填充最小日期和最大日期之间缺少的日期,从而使缺少的字段以如下方式结束 [{ “probeTemp”:“35.40”, “日期探测”:“2015-08-1” }, { “prob

以下是我所拥有的一个样本:

[{
“probeTemp”:“35.40”,
“日期探测”:“2015-08-1”
}, {
“probeTemp”:“34.89”,
“日期探测”:“2015-08-3”
}, {
“probeTemp”:“34.42”,
“日期探测”:“2015-08-5”
}]
如何在json字符串中填充最小日期和最大日期之间缺少的日期,从而使缺少的字段以如下方式结束

[{
“probeTemp”:“35.40”,
“日期探测”:“2015-08-1”
}, {
“probeTemp”:空,
“日期探测”:“2015-08-2”
}, {
“probeTemp”:“34.89”,
“日期探测”:“2015-08-3”
}, {
“probeTemp”:空,
“日期探测”:“2015-08-4”
}, {
“probeTemp”:“34.42”,
“日期探测”:“2015-08-5”
}]
我发现了,但我不知道如何将其应用于我的数据。有什么帮助吗


编辑2:,但我得到了未捕获的类型错误:无法读取第7行和第23行未定义的的属性“length”。

嘿,我会这样做

  • 获取第一个日期并解析ist Date.parse()
  • 走到下一个日期,检查第一个日期+1(new Date()getDate()+1)是否是相同的日期,如果是,如果不创建并插入此日期,则走到下一个日期
  • 等等

  • 使用api实例化一个日期,该api足够智能,当在迭代中一次提前一天时,可以计算短月、闰年等。通过向getDate()返回的任何值(在Date实例上)添加1来提前,然后使用后面的值调用setDate方法。或者使用getTime和setTime方法添加一天中的毫秒数

    根据之前存在的探针温度图检查每个日期

    您可以让另一个max date实例等待比较。进行比较时,在两个实例上都使用getTime方法,即:

    if ( iterDate.getTime() !== maxDate.getTime() ) {
        if ( !previousProbeTemp )
            newProbeTemp = null;
    

    我们从第一次和最后一次约会开始。让

    const a = [{
      "probeTemp": "35.40",
      "dateProbe": "2015-08-1"
    }, {
      "probeTemp": "34.89",
      "dateProbe": "2015-08-3"
    }, {
      "probeTemp": "34.42",
      "dateProbe": "2015-08-5"
    }]; 
    
    然后

    现在我们可以构建所有日期的范围

    const dates = [ ...Array(
            Date.parse(lastDate)/86400000 - Date.parse(firstDate)/86400000 + 1).keys()    
        ].map(k => new Date(
                86400000*k+Date.parse(firstDate)
            ).toISOString().slice(0, 10).replace(/-0(\d)$/, '-$1')); 
    // [ "2015-08-1", "2015-08-2", "2015-08-3", "2015-08-4", "2015-08-5" ] 
    
    我们创建了具有适当长度的范围,然后将其在时间线中以毫秒为单位从历元移动到第一个日期。最后,我们再次创建了日期转换 对于字符串,切片以获得更自然的日期格式,并使用regexp从天数中删除前导的
    0

    在最后一步中,我们可以定义包含结果的
    res
    -变量。我们将其定义为空数组和for循环中的下一个元素。最重要的是
    probeTemp
    。如果我们从数组中考虑的日期是相等的日期,那么我们可以添加
    probeTemp
    ,然后增加
    j
    索引,如果它是新的日期,那么
    probeTemp
    等于null并且
    j
    索引不变

    let res = []; 
    for(let i=0,j=0; i<dates.length; i++) { 
        res[i] = {
            dateProbe: dates[i], 
            probeTemp: dates[i] === a[j].dateProbe ? a[j++].probeTemp : null
        }; 
    }; 
    console.table(res);
    
    let res=[];
    
    对于(假设i=0,j=0;i你所说的缺少日期是什么意思?在最小值和最大值之间?@Weedoze是的,很抱歉没有具体说明。我将编辑我的问题。你尝试过什么吗?获取最小值和最大值,然后在这两者之间每天迭代theml@Weedoze我开始尝试一些东西,但我在javascript/jquery方面的知识不是很丰富。我设法用mySQL做到了这一点,但是我更愿意让客户来处理这个问题。为什么
    2015-08-3
    会被复制?你介意给我一个代码示例来说明如何做吗?
    let res = []; 
    for(let i=0,j=0; i<dates.length; i++) { 
        res[i] = {
            dateProbe: dates[i], 
            probeTemp: dates[i] === a[j].dateProbe ? a[j++].probeTemp : null
        }; 
    }; 
    console.table(res);