【问题标题】:Javascript Group Array by Interval [duplicate]按间隔排列的Javascript组数组[重复]
【发布时间】:2017-06-08 06:29:44
【问题描述】:

我有一个具有不同时间戳的对象数组,它们是来自 MomentJS 的 Moment-Objects。

 [
  {
    "name": "A",
    "eventDateTime": "2016-12-09 07:50:17",
  },
  {
    "name": "B",
    "eventDateTime": "2016-12-09 06:50:17",
  },
  {
    "name": "C",
    "eventDateTime": "2016-12-09 07:01:17",
  }
]

现在我需要做的(通常这些对象更多)是首先对它们进行排序,然后按 15 分钟的间隔分组。

这样排序我应该得到

[
  {
    "name": "B",
    "eventDateTime": "2016-12-09 06:50:17",
  },
  {
    "name": "C",
    "eventDateTime": "2016-12-09 07:01:17",
  },
  {
    "name": "A",
    "eventDateTime": "2016-12-09 07:50:17",
  }]

然后我需要从时间为 06:50:17 的第一个对象开始对它们进行分组。所以这将是我应该添加所有对象的第一个组,在 06:50:17 和 07:05:17 之间。由于数组已排序,因此我可以迭代直到一个对象早于 07:05:17。

总而言之,这并不难实现,但它应该尽可能高效。我们使用具有许多功能的 Lodash.js。我知道 groupBy 方法,但不知道如何 A)使用 MomentJS 和 B)在其中定义一个函数,该函数检查间隔。

你们有什么建议吗?

【问题讨论】:

    标签: javascript html typescript momentjs lodash


    【解决方案1】:

    var data = [{
      "name": "A",
      "eventDateTime": "2016-12-09 07:50:17",
    }, {
      "name": "B",
      "eventDateTime": "2016-12-09 06:50:17",
    }, {
      "name": "C",
      "eventDateTime": "2016-12-09 07:01:17",
    }];
    var sortedDate = _.sortBy(data, function(o) {
      return o.eventDateTime;
    });
    
    var groupTime = null; // new Date(new Date(sortedData[0].eventDateTime).getTime() + 15 * 60000);
    var groupedData = _.groupBy(sortedDate, function(d) {
      // no need to do this if eventDateTime is already a Date object
      var time = new Date(d.eventDateTime);
      // you can remove this condition and initialize groupTime with [0].eventDateTime
      if (!groupTime) groupTime = new Date(time.getTime() + 15 * 60000);
      return time - groupTime <= 900000 ? groupTime : groupTime = time;
    });
    
    // modify the groupedData keys however u want
    console.log(groupedData);
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.2.1/lodash.min.js"&gt;&lt;/script&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-08
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多