【问题标题】:Nested For loop for initializing array of arrays for Javascript用于初始化 Javascript 数组数组的嵌套 For 循环
【发布时间】:2013-01-21 07:13:42
【问题描述】:

我的程序中有一个非常简单的部分有问题... 数组“population”中的元素也是一个数组。每个“temp”数组有 28 个随机数,正在加载到数组填充中。我的问题是数组“人口”以某种方式保存了所有相同的数组,就像它被覆盖每个循环一样。我在这个非常简单的问题上花了这么多时间,这是某种错误吗?注释的“警报”用于检查总体的元素 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();

【问题讨论】:

    标签: javascript arrays loops for-loop nested


    【解决方案1】:

    您需要在内部循环中创建一个新的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 数组时,您最终会得到对temp 数组的引用population 数组的每个索引处的相同 temp 数组。相反,如果您在内循环中创建一个新的temp 数组,那么population 数组中的每个数组都会不同。


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

    【讨论】:

    • 非常感谢您的回答,它确实有帮助,但为了让我理解,我认为临时数组将被覆盖,因为内部循环的 j 计数器再次回到 0一旦外部循环迭代?
    • @WilmorHerald - 您覆盖了temp 数组的值,但是您在population 数组的每个元素中放置了指向相同temp 数组的指针,因此@987654337 中的每个元素@array 是一样的。相反,您必须在第一个循环内创建一个带有temp = []; 的新temp 数组,以便population 的每个元素都包含一个不同的数组。如果你还是不明白,那么你需要学习一下javascript中的“按引用”和“按值”赋值。 Google 将成为您的朋友。
    • 哦,现在我明白了。非常感谢,感激不尽。在我理解它之后,我立刻意识到我的代码真的很白痴。哈哈..谢谢你。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-01-28
      • 1970-01-01
      • 2021-10-23
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多