angular - 数组按月和日分组
问题描述
假设我有一组人:
{ objectId: string; name: string; birth: Date;}
我将如何拆分这个数组,将具有相同月份和相同出生日期的人分组?我可以按月过滤:
MONTHS.forEach((month) => {
if (results) {
const monthFilter = results.filter(x => x.birth.getMonth() +1 === month.number)
console.log(month.month, monthFilter);
}
});
但是我不知道如何过滤和分组同一个月和同一天出生的人。
Obs.:在这种情况下,年份是无关紧要的。
编辑
我得到它的工作如下:
treatMonths(results: Member[]) {
MONTHS.forEach((month) => {
const monthSize = this.GetDaysInMonth(month.number);
console.log(month.month, monthSize);
const bMonth: BirthMonth = new BirthMonth();
bMonth.monthName = month.month;
bMonth.monthNumber = month.number;
bMonth.days = [];
for (let day = 1; day <= monthSize; ++day) {
const dayOfMonth: DayOfMonth = new DayOfMonth();
dayOfMonth.day = day;
dayOfMonth.members = [];
dayOfMonth.members = results.filter(x => (x.birth.getMonth() +1 === month.number) && (x.birth.getDate() === day));
if (dayOfMonth.members.length) {
bMonth.days.push(dayOfMonth);
}
}
if (bMonth.days.length) {
if (!this.birthMembers.find(x => x.monthNumber === month.number)) {
this.birthMembers.push(bMonth);
}
}
});
this.birthMembersSubject.next(this.birthMembers);
}
GetDaysInMonth(month: number) {
var date = new Date();
if (month === 2) {
return 29;
} else {
return new Date(date.getFullYear(), month, 0).getDate();
}
}
不知道这是否是最好的方法,但就目前而言,它正在以我需要的方式返回。
解决方案
如果您可以在 array.filter 中添加日过滤器,那么它可能会返回您想要的结果
const monthFilter = results.filter(x => (x.birth.getMonth() +1 === month.number) && (x.birth.getDay() === month.day))
推荐阅读
- sql - 在 MS-ACCESS SQL 中添加要查询的行
- apache - 如何使用htaccess根据不同的条件进行重定向?
- javascript - 如何在 Vue3 组合 API 上使用 Vue2 插件?
- image - 显示来自共享点列表的图像
- maven - Groovy 依赖管理
- java - 如何在 Docker 中使用 OAuth2 运行 Micronaut 应用程序
- javascript - 使用 jquery AJAX 获取网页动态数据
- angular - 如何在 ngx stripe angular 中获取输入的卡片详细信息
- python - 我无法更改 python-docx 中的字体
- android - 如何在 Flutter 中从 Firebase 获取 uid?