我在 JS 中有一个简单的对象,以年份为键,在月份内。每个月里面,我想存储信息。这是我的目标:
function generateYearMonths() {
var firstYear = 2012;
var todayDate = new Date(Date());
var lastYear = todayDate.getYear();
var yearsMonths = {}
var months = {}
for(var x=1; x<=12; x++) {
months[x.toString()] = {
totalExpenses: 0,
totalIncomes: 0,
totalBalance: 0
}
}
for(var x=firstYear; x<=lastYear; x++) {
yearsMonths[x] = months
}
return yearsMonths;
}
我想分配年份和月份,例如2012年1月,它们是键,值。我这样做:
yearsMonths[2012][1]["totalExpenses"] = 23;
并且值 23 被分配给每年的第 1 个月。我不明白错误在哪里。我第一次尝试 Google 脚本,我不知道我做错了什么,我只是想用值更新哈希。但对于每个年月对 key ,不要覆盖每个月。
请帮忙。
编辑 - 将月份移至年的循环中
function generateYearMonths() {
var firstYear = 2012;
var todayDate = new Date(Date());
var lastYear = todayDate.getYear();
lastYear = 2013;
var yearsMonths = {}
for(var x=firstYear; x<=lastYear; x++) {
var months = {}
for(var x=1; x<=12; x++) {
months[x.toString()] = {
totalExpenses: 0,
totalIncomes: 0,
totalBalance: 0
}
}
yearsMonths[x] = months
}
return yearsMonths;
}
现在我不会为每个月分配相同的值,因为脚本无限运行......
最佳答案
在 Javascript 中,对象是通过引用传递的,而不是通过值传递的。在整个脚本中,您只能引用一个 var Months = {}
对象,因此当您这样做时
for(var x=firstYear; x<=lastYear; x++) {
yearsMonths[x] = months
}
every yearMonths[x]
引用相同的单数 months
对象。相反,深度克隆 months
,以确保 yearMonths
数组中的每个项目都引用唯一的对象:
for(var x=firstYear; x<=lastYear; x++) {
yearsMonths[x] = JSON.parse(JSON.stringify(months));
}
关于javascript - 谷歌脚本: i can not assign a value to a key of an object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51575877/