【问题标题】:Generate empty data between the range of a timestamp date | Javascript生成时间戳日期范围之间的空数据 | Javascript
【发布时间】:2015-02-27 17:47:53
【问题描述】:

我得到了一些带有时间戳的统计数据。我想把它画在图表上。 数据以固定步长(1 秒)递增,但其中一些缺失。 我想用自己生成的时间戳来填补这个空白。

// exmaple data form 18:00 to 18:47 (step 60000ms)

var data = [
    [1425056400000, 1123], //18:00
    [1425056460000, 1124], //18:01
    [1425056520000, 1125], //18:02
    [1425056580000, 1126], //18:03
    [1425056640000, 1140], //18:04
    [1425057840000, 2123], //18:24
    [1425057900000, 2133], //18:25
    [1425057960000, 2141], //18:26
    [1425059160000, 5129], //18:46
    [1425059220000, 5129]  //18:47
];


// required result
var dataParsed = [
    [1425056400000, 1123], //18:00
    [1425056460000, 1124], //18:01
    [1425056520000, 1125], //18:02
    [1425056580000, 1126], //18:03
    [1425056640000, 1140], //18:04
    [1425056700000, 0], //18:05
    [1425056760000, 0], //18:06
    [1425056820000, 0], //18:07
    //(...)
    [1425057780000, 0], //18:23
    [1425057840000, 2123], //18:24
    [1425057900000, 2133], //18:25
    [1425057960000, 2141], //18:26
    //(...)
    [1425058800000, 0], //18:40
    //(...)
    [1425059160000, 5129], //18:46
    [1425059220000, 5129]  //18:47
];

如何使用 JavaScript 做到这一点?

【问题讨论】:

    标签: javascript arrays loops timestamp


    【解决方案1】:

    当你遍历原始数组时,检查当前元素是否是序列中的下一个元素。如果没有,使用另一个循环来生成缺失的元素:

    var dataParsed = [];
    var lastTime = data[0][0];
    var timeStep = 60000;
    for (var i = 0; i < data.length; i++) {
        var curTime = data[i][0];
        if (curTime > lastTime + timeStep) {
            for (var time = lastTime + timeStep; time < curTime; time += timeStep) {
                dataParse.push([time, 0]);
            }
        }
        dataParse.push(data[i]);
        lastTime = curTime;
    }
    

    【讨论】:

    • 谢谢,您的回答对我帮助很大
    【解决方案2】:

    您可以有一个从第一个时间戳到最后一个时间戳的循环,以 60 秒递增。然后用当前值 + 缺失值填充一个新数组,如下所示。

    var dataParsed = [];
    for(var i=data[0][0], j=0; i<=data[data.length-1][0]; i+=60000) {
      if(i == data[j][0]) {
        dataParsed.push(data[j]);
        j++;
      } else {
        dataParsed.push([i, 0]);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-11
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      相关资源
      最近更新 更多