我有一组数据点[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毫秒勾选日期之间重复相同的值。
答案 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