【发布时间】:2014-05-30 22:04:17
【问题描述】:
假设我们在 Javascript 中有一个这样的集合:
[
{ date: 'Fri, 02 May 2014 19:05:00 GMT', value:'abc' },
{ date: 'Fri, 02 May 2014 23:43:00 GMT', value:'jkl' },
{ date: 'Fri, 02 May 2014 19:01:00 GMT', value:'def' },
{ date: 'Fri, 02 May 2014 19:09:00 GMT', value:'ghi' },
{ date: 'Fri, 02 May 2014 23:54:00 GMT', value:'mno' }
]
我想找到一个优雅的算法,按“最近”日期按此数组分组。如果日期在前一个日期之前或之后 15 分钟,它将被推送到同一个对象中。
我并不关心子数组的结构。此条目的结果可能是:
[
[
{ date: 'Fri, 02 May 2014 19:05:00 GMT', value:'abc' },
{ date: 'Fri, 02 May 2014 19:01:00 GMT', value:'def' },
{ date: 'Fri, 02 May 2014 19:09:00 GMT', value:'ghi' }
], [
{ date: 'Fri, 02 May 2014 23:43:00 GMT', value:'jkl' },
{ date: 'Fri, 02 May 2014 23:54:00 GMT', value:'mno' }
]
]
我尝试使用 underscore.js 没有真正成功:
_.map(logs_by_date, function(group, date) {
return _.reduce(group, function(memo, elem) {
var moment = get_moment(elem);
memo[moment].push(elem);
return memo;
}, { 'date': date});
});
【问题讨论】:
-
我喜欢这样的工作。他们有一个
groupBy功能应该有所帮助。 underscorejs.org/#groupBy -
@StéphanLascar:时间什么时候开始?是从列表中最早的时间开始每 15 分钟一次,还是从整点开始每 15 分钟一次,或者其他什么不同?
-
@StéphanLascar 在这种情况下,您是否意识到答案不是唯一的?同样,如果您查看日期
19:00:00、19:10:00和19:20:00,您将如何对它们进行分组?提供日期的顺序是否相关? -
您应该能够通过一点努力来解决这个问题。这是一个非常详细的示例,可以帮助您入门 -> jsfiddle.net/PM3v9/1
-
这只是一个如何做到这一点的例子,这就是为什么我没有将它作为答案发布,我不太清楚排序规则应该是什么,但这会给你你想要的特定数据的结果,但是如果你有十次以五分钟的间隔会发生什么,应该所有这些都结束在同一个数组中,或者应该使用某种初始时间等等。这一切都非常不清楚!跨度>
标签: javascript arrays grouping