Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用附加属性和时刻创建工作日数组_Javascript_Arrays_Typescript_Momentjs - Fatal编程技术网

Javascript 使用附加属性和时刻创建工作日数组

Javascript 使用附加属性和时刻创建工作日数组,javascript,arrays,typescript,momentjs,Javascript,Arrays,Typescript,Momentjs,使用Momentjs,我创建了一个对象数组,month。在这个数组中有两个属性:周,和天周只是一个数字,一年中的一周,由时刻生成day当前是该周的一组日期,包括月初或月末的肩头日期(例如,上周的范围为27-2,10月27日至11月2日)。我现在需要将days属性作为一个对象,而不仅仅是一个数字数组,它需要一个date属性作为月份中的日期,以及isShoulderDate,一个布尔值,用于确定它是在当前月份之内还是之外 下面是先前如何生成month数组的 this.month = [];

使用Momentjs,我创建了一个对象数组,
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');
      });
    });