根据日期从数组中提取值?

时间:2013-04-07 06:22:05

标签: javascript arrays date time

我有一组数据点[date, value],就像这样......

data_points = [[1310279340, 1], [1310279340, 1]]

我需要根据“毫秒前”创建一个数组,每秒有十个值,或者每100毫秒向后一个值。

新数组的值看起来像[ms ago, value],就像这样......

ms_ago_points = [[0,3],[100,6],[200,7]]

因此该数组中的最后一个值表示[200ms前,值为7]。

我很难弄清楚如何根据第一个数组中的日期值获取“Xms前的值”。如果需要,我可能能够以一种格式以外的格式获取初始日期/值,如果它更容易轮询数据。

感谢任何指导!!

编辑:我希望在它们之间每100毫秒勾选日期之间重复相同的值。

2 个答案:

答案 0 :(得分:0)

var now = Date.now(),
    l = data_points.length,
    ms_ago_points = [];

for ( var c = 0; c < l; c++ ) {
  ms_ago_points.push([now - data_points[c][0],data_points[c][1]);
}

也许您之后需要对ms_ago_points进行排序,但这应该会为您提供所需的数组。 然而:我认真地建议你不要使用多维数组而是使用对象:

ms_ago_points= [{ms: 0, value: 3},{ms:100, value: 6}...]

*编辑:当然这假设你的data_points已经是100ms步,否则你必须实现插值:)

答案 1 :(得分:0)

我相信这符合您的要求:

function msFromDataPoints(nowTime, dataPoints) {
    var d = dataPoints.length,
        i = 0,
        anchor = Math.floor(nowTime.getTime() / 100) * 100,
        ms = anchor,
        msArr = [];
    while (d--) {
        while (ms >= data_points[d][0] * 1000) {
            msArr.push([anchor - ms, dataPoints[d][1]];
            ms -= 100;
        }
    }
    return msArr;
}

Js Fiddle中查看。

注意:我发现数据结构有点奇怪。输入的对象似乎最好:

[{date: 1310279340, value: 1}, {date: 1310279340, value: 1}]

您的输出数组根本不需要毫秒,因为简单地[1, 1, 5, 5, 3, 2 4](或其他)将被理解为从毫秒开始并且增加100的毫秒索引。如果绝对需要,您可以使用稀疏数组:

result = [];
result[0] = 1;
result[100] = 1;
result[200] = 5; // and so on