在for语句中循环的对象中存储动态数组值

时间:2010-06-23 21:18:41

标签: javascript jquery

我希望创建一组存储在对象中的动态创建的数组。结果会与此类似......

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)。

2 个答案:

答案 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] = []移到循环外部。