You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止日期数组元素自动更新?工作日计算异常修复

问题原因与解决方案

问题根源

你遇到的问题是Date对象的引用特性导致的:

  • Date是引用类型,循环中你反复复用同一个tempDate对象,每次往weekdaysList里push的都是这个对象的引用。
  • 你的addDaystoGivenDate方法里,date.setUTCDate()会直接修改传入的Date对象本身,后续每次调用该方法时,tempDate指向的对象时间被修改,数组里的所有引用都会同步变化,最终数组里全是最后一次修改后的日期。

两种解决办法

方法1:修改addDaystoGivenDate,返回全新的Date对象

调整这个方法,先创建原日期的副本,再修改副本的日期,避免修改传入的原对象:

private addDaystoGivenDate(date: Date, numberOfDays: number): Date {
  // 先复制原日期,再操作副本
  const newDate = new Date(date);
  newDate.setUTCDate(newDate.getUTCDate() + numberOfDays);
  return newDate;
}

这样每次调用该方法都会返回独立的新Date对象,循环里的tempDate每次都是新实例,push到数组里的引用不会被后续操作影响。

方法2:在push数组时创建日期副本

如果不想修改addDaystoGivenDate,可以在往数组存日期时手动创建副本:

if (this.isWeekDay(tempDate)) {
  weekdaysList.push(new Date(tempDate)); // 存入副本而非原对象引用
}

这样数组里的每个元素都是独立的Date实例,后续修改tempDate不会改变数组里已存的日期。

验证效果

修改后,weekdaysList里的每个工作日日期都会是独立对象,不会再出现自动递增的情况,返回结果符合预期。


内容的提问来源于stack exchange,提问作者TheLoneWolf91193

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:37:08