Javascript 使用附加属性和时刻创建工作日数组
使用Momentjs,我创建了一个对象数组,Javascript 使用附加属性和时刻创建工作日数组,javascript,arrays,typescript,momentjs,Javascript,Arrays,Typescript,Momentjs,使用Momentjs,我创建了一个对象数组,month。在这个数组中有两个属性:周,和天周只是一个数字,一年中的一周,由时刻生成day当前是该周的一组日期,包括月初或月末的肩头日期(例如,上周的范围为27-2,10月27日至11月2日)。我现在需要将days属性作为一个对象,而不仅仅是一个数字数组,它需要一个date属性作为月份中的日期,以及isShoulderDate,一个布尔值,用于确定它是在当前月份之内还是之外 下面是先前如何生成month数组的 this.month = [];
month
。在这个数组中有两个属性:周
,和天
<代码>周只是一个数字,一年中的一周,由时刻生成day
当前是该周的一组日期,包括月初或月末的肩头日期(例如,上周的范围为27-2,10月27日至11月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')),
});
}
这只是在
date
属性中反复输出3
。我还希望在最初填充数组时进行映射,而不是使用额外的forEach
,以避免额外的迭代。主要问题是使用array(7)。fill({})
使用one对象填充数组中的7个插槽。它们不是7个对象,而是一个,您已经引用了7次。因此,当您稍后对第一个数组元素中引用的对象进行更新时,该更改在所有数组元素中都可见
这是你可以做到的。演示将于2019年5月进行:
var selectedDate={from:new Date(“2019-05-01”)};
本月=[];
const curMonth=时刻(this.selectedDate.from).month();//拿到月票
const startWeek=时刻(this.selectedDate.from).startOf('month').week();
const endWeek=时刻(this.selectedDate.from).endOf('month').week();
对于(let week=startWeek;week({
日期:dt.add(i?1:0,'day')。格式('D'),
isShoulderDate:dt.month()!==curMonth,
})),
});
}
控制台日志(月)代码>
主要问题是使用数组(7).fill({})
时,您正在使用一个对象填充数组中的7个插槽。它们不是7个对象,而是一个,您已经引用了7次。因此,当您稍后对第一个数组元素中引用的对象进行更新时,该更改在所有数组元素中都可见
这是你可以做到的。演示将于2019年5月进行:
var selectedDate={from:new Date(“2019-05-01”)};
本月=[];
const curMonth=时刻(this.selectedDate.from).month();//拿到月票
const startWeek=时刻(this.selectedDate.from).startOf('month').week();
const endWeek=时刻(this.selectedDate.from).endOf('month').week();
对于(let week=startWeek;week({
日期:dt.add(i?1:0,'day')。格式('D'),
isShoulderDate:dt.month()!==curMonth,
})),
});
}
控制台日志(月)代码>
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');
});
});