javascript将值添加到一个循环中的json对象
我正在向对象列表中的每个对象添加一个值。但我不知道为什么在每个循环中为每个对象添加日期。javascript将值添加到一个循环中的json对象
这是我的代码:
var emptyday: { "date":""
}
//make list of days in month
var monthlist = [];
for (i=0;i<=days_in_months;i++) {
monthlist[i] = emptyday;
}
所以在我的例子可以说days_in_months是31(天)
现在来加入
for (x=1;x<=days_in_months;x++) { console.log(x);
if (x<10) {
daynumber = "0" + x;
} else {
daynumber = x;
}
datestring = year + "-"+ (month+1) + "-" + daynumber;
dayofmonth = monthlist[x];
dayofmonth["date"] = datestring;
//monthlist[x].date = datestring;
}
当我尝试添加(DAYOFMONTH [“date”] = datestring或monthlist [x] .date)它添加到每个循环中所有对象的所有日期值。
的的console.log看起来像这样用于第一循环:
[对象{日期= “2013年1月1日”},{对象日期= “2013年1月1日”},{对象日期=“2013-1-01”},Object {date =“2013-1-01”},Object {date =“2013-1-01”},Object {date =“2013-1-01”}等
在第一循环
而在最后一个循环31次这将是2013年1月31日
我不明白为什么它是增加该值对所有对象。我已经尝试过console.log,并且在各处调试以读出值并试图理解出了什么问题,但仍未找到解决方案。
回答:
数组中的引用都指向相同的对象。 Javascript是通过价值。所以,当你做
//make list of days in month var monthlist = [];
for (i=0;i<=days_in_months;i++) {
monthlist[i] = emptyday;
}
在你的阵列在把基准emptyday
的副本在每个位置上。由于引用的副本都指向相同的对象字面值,因此您有一个对一个对象的引用数组。
您需要每次通过列表时创建一个新的对象字面值。
var monthlist = []; for (i=0;i<=days_in_months;i++) {
monthlist[i] = {
date: ""
};
}
以上是 javascript将值添加到一个循环中的json对象 的全部内容, 来源链接: utcz.com/qa/266160.html