gpt4 book ai didi

javascript在循环中向json对象添加值

转载 作者:行者123 更新时间:2023-11-30 13:10:12 25 4
gpt4 key购买 nike

我正在为对象列表中的每个对象添加一个值。但我不知道为什么它在每个循环中为每个对象添加日期。

这是我的代码:

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 or monthlist[x].date) 时,它会添加到每个循环中所有对象的所有日期值。

第一个循环的 console.log 看起来像这样:

[对象{日期=“2013-1-01”},对象{日期=“2013-1-01”},对象{日期=“2013-1-01”},对象{日期=“2013- 1-01"}、对象{date= "2013-1-01"}、对象{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对象添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com