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

Nested For loop for initializing array of arrays for Javascript

本文关键字:数组 For 循环 嵌套 初始化 用于 Javascript      更新时间:2023-09-26

我的程序中有一个非常简单的部分出现了问题…数组'population'中的元素也是一个数组。有28个随机数,每个"临时"数组被加载到数组人口。我的问题是,数组'人口'的所有相同的数组保存在其中,就像它被覆盖每一个循环。我花了这么多时间在这个非常简单的问题上,这是某种bug吗?注释的"alert"用于检查人口中的元素0和1。每次循环它都会被重写所以population数组中的每个temp元素都是一样的。请帮帮我……

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();

你需要在内循环中创建一个新的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数组中只会引用temp数组,当您一遍又一遍地使用相同的temp数组时,您最终会在population数组的每个索引处引用相同的temp数组。相反,如果在内循环中创建一个新的temp数组,那么population数组中的每个数组将是不同的。


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

这是因为它们是同一个数组。使用temp = []创建它,然后将它分配给每个population[i], i=0..9