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

标签 javascript arrays loops for-loop nested

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

最佳答案

您需要在内部循环中创建一个新的 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 数组中的每个数组都将不同。


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

关于javascript - 用于初始化 Javascript 数组数组的嵌套 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14433934/

相关文章:

java - 将 JSON 与嵌套数组和 json 进行比较(数组顺序无关紧要)

java - Do While 循环跳过用户输入

javascript - 将 TypeScript 与 Jest 一起使用不会捕获语法错误

javascript - Docker for Windows REST API - 启用 CROSS

php - 如何在数组的开头和结尾添加缺失的日期?

c++ - 虽然在 y/n 输入 C++ 后不会开始循环

c# - 避免为不同的代码执行重复for循环

javascript - AngularJS 提交处理具有多个内部 Controller 的表单

javascript - 当 JSON 对象名称不是原子时如何从 JSON 中提取数据

c - 为什么我的新数组只复制并反转旧数组的前 10 个元素?