首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript按时间间隔分组数组

Javascript按时间间隔分组数组
EN

Stack Overflow用户
提问于 2017-01-24 00:55:02
回答 1查看 1.6K关注 0票数 1

我有一个具有不同TimeStamps的对象数组,它们是来自MomentJS的Moment对象。

代码语言:javascript
运行
复制
 [
  {
    "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分钟的间隔进行分组。

如此排序,我应该得到

代码语言:javascript
运行
复制
[
  {
    "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)在它内部定义一个函数,该函数检查间隔。

你们有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2017-01-24 01:38:38

代码语言:javascript
运行
复制
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);
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.2.1/lodash.min.js"></script>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41811564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档