Используя Momentjs, я создаю массив объектов, month
. Внутри этого массива есть два свойства: week
и day
. week
- это просто число, неделя в году, генерируемая моментом. day
в настоящее время представляет собой массив дат этой недели, включая промежуточные даты, если это начало или конец месяца (например, диапазон на прошлой неделе будет 27–2, с 27 октября по 2 ноября). Вместо того, чтобы иметь только массив чисел, мне теперь нужно, чтобы свойство days
было объектом, со свойством date
, которое является датой месяца, и isShoulderDate
, логическим значением, которое будет определять, находится ли оно внутри или снаружи. текущего месяца.
Вот как ранее был сгенерирован массив month
.
this.month = [];
const startWeek = moment(this.selectedDate.from).startOf('month').week();
const endWeek = moment(this.selectedDate.from).endOf('month').week();
for (let week = startWeek; week <= endWeek; week++) {
this.month.push({
week: week,
days: Array(7).fill(0).map((n, i) =>
moment().week(week).startOf('week').clone().add(n + i, 'day').format('D')),
});
}
Я попытался изменить свойство days
несколькими способами. Моя последняя попытка:
for (let week = startWeek; week <= endWeek; week++) {
this.month.push({
week: week,
days: Array(7).fill({
isShoulderDate: null,
}),
});
}
this.month.forEach((calendarWeek) => {
calendarWeek.days.map((day, n, i) => {
day.date = moment().week(calendarWeek).startOf('week').clone().add(n + i, 'day').format('D');
});
});
Это просто выводит 3
снова и снова в свойстве date
. Я также хотел бы сделать сопоставление при первоначальном заполнении массива, а не иметь дополнительный forEach
, чтобы избежать дополнительной итерации.