0

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

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

我需要创建一个基于“毫秒前”的数组,每秒有十个值,或者每 100 毫秒后退一个值。

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

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

所以该数组中的最后一个值表示 [200 毫秒前,值为 7]。

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

感谢您的任何指导!

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

4

2 回答 2

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已经在 100 毫秒的步骤中,否则您必须实现插值:)

于 2013-04-07T11:22:38.660 回答
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](或其他)将被理解为意味着毫秒索引从 0 开始并增加 100。如果绝对需要,您可以使用稀疏数组:

result = [];
result[0] = 1;
result[100] = 1;
result[200] = 5; // and so on
于 2013-04-08T06:40:09.573 回答