我有一组对象,其中包含一个名为timestamp
和motion
的键。 motion
包含一个值,timestamp
包含一个unix时间戳。我想迭代一些对象并找到它们对应的“时间”时间段,然后我想要总计给定时间的运动值并将整个事物保存在数组数组中。我希望持续时间可以改变。
让我们说这些是我的对象;
{
timestamp: 1397160634,
motion: 2,
id: '534771d8c311731e21c75c9f'
},
{
timestamp: 1397160634,
motion: 3,
id: '534771d8c311731e21c75c9f'
}
现在我创建我的结果数组
var sampleDuration = 60; // Min
var minutesInDay = 1440;
var samplesPerDay = minutesInDay/sampleDuration;
var finalResultItem = []
for (var i = 0; i < samplesPerDay; i++) {
var IndividualresultArray = []
IndividualresultArray.push(60*i);
IndividualresultArray.push(0);
finalResultItem.push(IndividualresultArray);
}
我现在有一个数组数组,每个子数组的第一个项目是一个数字(对应一个分钟标记),第二个值为零。
我现在想循环遍历所有对象,并根据时间戳中的时间范围增加第二个值(motion
)
_forEach(objects, function (object) {
{
// grab the timestamp
// figure out which minute range it coresponds to
// increment the array value that corresponds to the minute stamp
// rinse and repeat
}
这是我空白的地方,我需要最终结果看起来像这样
[[30, 5],[60, 20],[90, 5],[120, 0] .........]
或者它甚至可能看起来像这样
[[000002400, 5],[000003000, 20],[000003600, 5],[000004200, 0] .........]
其中第一个值是忽略年,月和日的时间戳,只考虑一天中的时间。
我考虑过以某种身份使用moment.js,但我不确定如何。对这个问题的任何帮助都会很棒。
答案 0 :(得分:1)
我为你创建了jsFiddle。运动增量逻辑应该看起来像(我在这里使用jQuery,但你明白了)
// Loop through and increment motion
$.each(objs, function (idx, obj) {
var date = new Date(obj.timestamp * 1000); // Convert to milliseconds
var minutesInDay = date.getUTCHours() * 60 + date.getUTCMinutes(); // Remove UTC for local time!
var minuteRange = Math.floor(minutesInDay / sampleDuration);
finalResultItem[minuteRange][1] += obj.motion;
});
编辑:编辑后删除了一些讨论。我还使用了更基于sampleDuration
的通用逻辑。
答案 1 :(得分:0)
这应该这样做:
_forEach(objects, function (object) {
var date = new Date(objec.timestamp*1000);
var minuteOfDay = date.getUTCHours()*60+date.getUTCMinutes();
finalResultItem[minuteOfDay][1] += object.motion;
})
对于可变采样率,使用secondOfDay
并将其除以sampleDuration
,然后将其放置以获取数组索引。