首页 > 解决方案 > 数组按月和日分组

问题描述

假设我有一组人:

{ 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();
    }
  }

不知道这是否是最好的方法,但就目前而言,它正在以我需要的方式返回。

标签: angulartypescriptangular-material

解决方案


如果您可以在 array.filter 中添加日过滤器,那么它可能会返回您想要的结果

const monthFilter = results.filter(x => (x.birth.getMonth() +1 === month.number) && (x.birth.getDay() === month.day))

推荐阅读