【问题标题】:How do I loop through objects and categorize by timestamps in Javascript?如何循环遍历对象并按 Javascript 中的时间戳进行分类?
【发布时间】:2014-05-30 05:14:41
【问题描述】:

我有一个对象数组,它们有一个名为timestampmotion 的键。 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,但我不确定如何使用。对这个问题的任何帮助都会很棒。

【问题讨论】:

  • 你是不是在创建finalResultItem时出错了?它不是你的“最终结果”的格式。另外,您能否阐明您想要的第一个值 - “仅考虑一天中的时间”?那是什么价值?分钟?秒?
  • 是的,psudocode 中有错误,我已修复(我认为)。每个数组的第一个值应该是代表一天中某个时间的数字,除此之外,格式非常随意,我永远不需要超过 5 分钟的分辨率,所以 min 可能是最好的

标签: javascript arrays parsing momentjs


【解决方案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 的更通用的逻辑。

【讨论】:

  • @user379468 好的,我进行了编辑以考虑您的更改并使其更通用。如果这能让你走上正轨,请告诉我!
【解决方案2】:

应该这样做:

_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,然后将其取底以获得您的数组索引。

【讨论】:

    猜你喜欢
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2013-03-09
    • 2015-09-16
    • 2015-03-17
    • 2018-01-19
    相关资源
    最近更新 更多