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

回到顶部