我希望创建一组存储在对象中的动态创建的数组。结果会与此类似......
object.array0.length = 5, object.array1.length = 4, etc
将根据在应用程序中其他地方声明的数值,在for循环中生成数组的名称。
以下是我的代码......
var obj = {};
var weekNum = 4;
for(i=0; i < weekNum.length;i++) {
obj['week'+i] = [];
obj['week'+i].push(day);
console.log('days stored in week0: '+obj.week0.length);
}
似乎正在发生的事情是obj['week'+i]
没有意识到它是一个数组,并且push命令似乎不足以让它这么认为。因此,obj.week0.length
的结果值始终为1,实际值每次都被替换,而不是数组递增。
也是fyi,
上面代码中的参数day
将从代表任何选定日期(Mon,Tues等)的另一个函数传入......但是,传递的顺序和天数可能不同但不会超过5 (MF)。
答案 0 :(得分:1)
对我来说,这似乎是一个逻辑问题。除了day
完全代表其他内容之外,你总是只在数组中插入1天。
var obj = {};
var weekNum = 4;
// var was missing :)
for(var i = 0; i < weekNum.length; i++) {
// check if entry exists before creating new.
obj['week'+i] = obj['week'+i] || [];
// you're always only inserting 1 value inside the week array
// don't you want to loop through the number of days
// and insert a day entry for *this* week for each day. like this?
// days is another array of, hmm.. days
for(var j = 0; j <days.length; j++) {
obj['week'+i].push(days[j]);
}
console.log('days stored in week0: '+obj.week0.length);
}
答案 1 :(得分:0)
它没有改变,因为每次循环都会将值重置为[]
,然后按下它。尝试将obj['week'+i] = []
移到循环外部。