gpt4 book ai didi

javascript - JS 日期数组如何按天分组

转载 作者:行者123 更新时间:2023-12-03 02:57:31 27 4
gpt4 key购买 nike

我试图找出最优化且循环次数最少的方法来对我的 js 日期对象数组进行分组:(请注意,这是浏览器控制台输出,它实际上是真正的 JS 日期,例如 new Date( ))

[Sat Aug 08 2015 08:30:00 GMT+0200 (Central Europe Daylight Time), Sat Aug 08 2015 09:30:00 GMT+0200 (Central Europe Daylight Time), Sun Aug 09 2015 08:30:00 GMT+0200 (Central Europe Daylight Time), Sun Aug 09 2015 09:30:00 GMT+0200 (Central Europe Daylight Time), Mon Aug 10 2015 18:00:00 GMT+0200 (Central Europe Daylight Time), Mon Aug 10 2015 23:00:00 GMT+0200 (Central Europe Daylight Time), Tue Aug 11 2015 18:00:00 GMT+0200 (Central Europe Daylight Time), Tue Aug 11 2015 23:00:00 GMT+0200 (Central Europe Daylight Time), Wed Aug 12 2015 18:00:00 GMT+0200 (Central Europe Daylight Time), Wed Aug 12 2015 23:00:00 GMT+0200 (Central Europe Daylight Time)]

将同一天的每个日期放在“ block ”内的组织数组,以便我可以将其显示在 UI“8 月 8 日”上,并显示当天内的 2 个或多少个日期。

例如:

[{day: 'Aug 08', times:[Sat Aug 08 2015 08:30:00 GMT+0200 (Central Europe Daylight Time), Sat Aug 08 2015 09:30:00 GMT+0200 (Central Europe Daylight Time)]}]

我目前的想法是

var startDays = _.map(occurences, function (date) {
return moment(date).startOf('day').format();
});

之后获得独特的日子:

_.uniq(startDays, true)

在我得到独特的日子之后,另一个循环将同一天添加到这个组中,正如你现在所看到的,你可能会明白为什么我不喜欢它,这就是为什么我很想得到一些聪明的帮助,因为没有什么这让我很困惑。谢谢。

最佳答案

下划线有 _.groupBy函数应该完全符合您的要求:

var groups = _.groupBy(occurences, function (date) {
return moment(date).startOf('day').format();
});

这将返回一个对象,其中每个键都是一天,值是一个包含该天所有事件的数组。

要将对象转换为与问题中形式相同的数组,您可以使用映射:

var result = _.map(groups, function(group, day){
return {
day: day,
times: group
}
});

要进行分组、映射和排序,您可以执行以下操作:

var occurrenceDay = function(occurrence){
return moment(occurrence).startOf('day').format();
};

var groupToDay = function(group, day){
return {
day: day,
times: group
}
};

var result = _.chain(occurences)
.groupBy(occurrenceDay)
.map(groupToDay)
.sortBy('day')
.value();

关于javascript - JS 日期数组如何按天分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31890076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com