嵌套For循环用于为Javascript初始化数组数组

时间:2013-01-21 07:13:42

标签: javascript arrays loops for-loop nested

我的程序中有一个非常简单的部分,它有问题...... 数组'population'中的元素也是一个数组..有28个随机数,每个'temp'数组被加载到数组中。我的问题是数组'population'以某种方式保存了所有相同的数组,就像它覆盖每个循环一样。我花了这么多时间在这个非常简单的问题上,这是一种什么样的错误?评论的“警报”用于检查人口的元素0和1。并且它以某种方式真正覆盖每个循环,因此填充数组中的每个临时元素都是相同的。请帮帮我..

var population[];
function init_population(){   
    temp = [];
    //Math.floor(Math.random()*8);
    for(i=0;i<10;i++){
        for(j=0;j<28;j++)
        temp[j] = Math.floor(Math.random()*8);
        population[i]= temp;
    //alert("population[0] = " +population[0] +" and population[1] = " +population[1]);
    }
}

init_population();

2 个答案:

答案 0 :(得分:0)

您需要在内部循环中创建一个新的temp数组,这样您就不会一遍又一遍地重复使用相同的数组:

var population = [];

function init_population() {   
    var temp, i, j;
    for(i=0; i<10; i++) {
        temp = [];
        for(j=0; j<28; j++) {
            temp[j] = Math.floor(Math.random()*8);
        }
        population[i] = temp;
    }
}

init_population();

由于将temp数组分配到population数组只会在{1}}数组中引用,当您一遍又一遍地使用相同的temp数组时,您最终会在temp数组的每个索引处引用相同的temp数组。相反,如果在内部循环中创建一个新的population数组,那么temp数组中的每个数组都将不同。


仅供参考,我还对您的代码进行了一些其他更正,以正确地将变量populationtempi声明为局部变量,因此它们不是隐式全局变量。

答案 1 :(得分:0)

这是因为它是相同的数组。 您可以使用temp = []创建它,然后将其分配给每个population[i],以便i = 0..9