我在javascript中有一个for循环,用于合并 calendarEvents 中的数据:
drop(info) {
var that = this;
var startDate = info.date;
var frequency = this.skippingNumber;
for (var i = 0; i <= 3; i++) {
(function (start) {
that.calendarEvents = that.calendarEvents.concat({
title: 'Dropped Event',
start: start,
allDay: info.allDay
});
})(startDate);
startDate = this.addDays(startDate, frequency);
}
}
addDays(date: Date, days: number): Date {
var passedDate = date;
passedDate.setDate(passedDate.getDate() + days);
return passedDate;
}
如果我在循环中登录 startDate ,则会得到实际值,即星期一,星期二,星期三,星期四。但是,当我登录 calendarEvents 时,我得到的只是每个数据中的星期四。 谁能帮我这个? 在此先感谢!!
答案 0 :(得分:3)
addDays()
的所有调用均作为参数接收,修改并返回相同的对象(var startDate = info.date
)。
重写addDays()
方法以创建并返回一个新的Date
对象:
addDays(date: Date, days: number): Date {
var passedDate = new Date(date.getTime());
passedDate.setDate(passedDate.getDate() + days);
return passedDate;
}
答案 1 :(得分:0)
在循环运行时,您只有一个startdate
对象正在变异。完成后,您将拥有一个包含对同一对象的引用的数组。
一种解决方法是在将开始日期对象连接到数组之前先克隆它:
(function (start) {
that.calendarEvents = that.calendarEvents.concat({
title: 'Dropped Event',
start: new Date(start.getTime()),
allDay: info.allDay
});
})(startDate);
尽管如建议的那样,最好重写您的addDays
函数,以免使您传入的日期对象发生变化。在可能的情况下,函数不应使它们的输入发生变化。