我正在尝试在两个JS对象之间构建一个数组。看来我的对象正在被正确创建,事实上下面的代码正在运行。
意外行为是输出数组中的每个对象都在转换以匹配我循环的最后一个日期。也就是说,如果我循环,无论我的todate_dateobj
是什么,我都得到一个完整的数组。
我必须做一些调试,因为实际的开始/结束日期是正确的,但我可以处理 - 我所遇到的是上述行为。
我是javascript的新手。我想这是突变的一些问题?任何指导都将不胜感激。
我离开了控制台登录只是因为为什么把它们取出来?
function build_dateobjs_array(fromdate_dateobj, todate_dateobj) {
// return an array of dateojects from fromdate to todate
var current_date = fromdate_dateobj;
var return_array = []
while (current_date <= todate_dateobj) {
return_array[return_array.length] = current_date; // I have read that this is generally faster that arr.push()
var tomorrow = new Date(current_date.getTime() + 86400000);
console.log('tomorrow: ', tomorrow);
current_date.setTime(tomorrow);
console.log('current_date: ', current_date)
console.log("build_dateobjs_array : ", return_array);
};
return return_array;
};
答案 0 :(得分:4)
Date
个对象是可变的。这一行:
current_date.setTime(tomorrow);
...更改Date
引用的current_date
对象的状态,您永远不会更改该对象。
因此,您要在return_array
中重复存储同一个对象。而是复制Date
:
return_array[return_array.length] = new Date(+current_date);
此外,最好改变
var current_date = fromdate_dateobj;
到
var current_date = new Date(+fromdate_dateobj);
因此您不会修改传入的Date
。
旁注:没有必要往返几毫秒,只需:
function build_dateobjs_array(fromdate_dateobj, todate_dateobj) {
// return an array of dateojects from fromdate to todate
var current_date = new Date(+fromdate_dateobj);
var return_array = [];
while (current_date <= todate_dateobj) {
return_array[return_array.length] = new Date(+current_date);
current_date.setDate(current_date.getDate() + 1);
};
return return_array;
}
(也没有理由在函数声明的末尾添加;
。)