javascript - 在Javascript中按月分组日期
问题描述
如何在Javascript中对日期数组进行分组以获得具有按月分组日期的新对象数组
我有:
const arr = [
Date Sat Dec 31 2016 01:00:00 GMT+0100 (Central European Standard Time),
Date Sun Jan 01 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Mon Jan 02 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Tue Jan 31 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Wed Feb 01 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Thu Feb 02 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Fri Feb 03 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Sat Feb 04 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Sun Feb 05 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Mon Feb 06 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Tue Feb 07 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Wed Feb 08 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Thu Feb 09 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Fri Feb 10 2017 01:00:00 GMT+0100 (Central European Standard Time),
]
我想得到:
const nArr = [
{
name: December,
dates:[
Date Sat Dec 31 2016 01:00:00 GMT+0100 (Central European Standard Time)
]
},
{
name: January,
dates:[
Date Sun Jan 01 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Mon Jan 02 2017 01:00:00 GMT+0100 (Central European Standard Time),
Date Tue Jan 31 2017 01:00:00 GMT+0100 (Central European Standard Time),
]
}
....
]
我尝试使用数组减速器,但我有问题
arr.reduce((acc, val) => {
const d = new Date(val)
let m = months[d.getMonth()]
acc[m] = acc[m]
acc[m].push(val)
return acc
}, [])
谢谢你的帮助,我是JS的新手
解决方案
const dates = [new Date(), new Date()];
const months = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
];
const sortedDates: Array<{name: string, dates: Array<Date>}> = [];
dates.map(date => {
const month = months[date.getMonth()];
const monthObj = sortedDates.find(datesByMonth => datesByMonth.name === month)
if (monthObj === undefined) {
sortedDates.push({
name: month,
dates: [
date
]
})
return;
}
monthObj.dates.push(date);
});
推荐阅读
- firebase - 缓慢、不可靠的 Firebase 云函数
- c# - 使用凭据调用命令
- oop - 在 Perl 6 中继承私有属性
- ruby-on-rails - Puma 发现了这个错误:无效的选项键:raise_on_unfiltered_parameters
- javascript - 如何将数字数组映射到对象数组中的属性?
- sql - oracle 版本从 11.2.0.1 更新到 11.2.0.4 后撤消表空间正在增长
- android - Android Kotlin Retrofit + SimpleXMLConverter ElementList 解析不正确
- c# - C# 对列表中的多个数字进行排序。按第二个字符串排序
- jquery - 如何从 jQuery.steps 返回 AJAX 调用的结果?
- angular - 获取列表firebase列表