javascript - 循环中的数组

标签 javascript arrays loops

创建一个生成随机数的小应用程序。见 fiddle here .

生成数字的函数有问题。有 3 个变量控制输出。集合/序列中数字的个数,集合的个数,以及限制生成数的数字,最大数。

我创建了 2 个循环来生成集合中的数字。内层循环创建一组数字(一个数组),外层循环将该集合添加到另一个数组 setArr

所以我创建了 2 个数组。一个将保存当前生成的集合 temp,一个将保存整个集合 setsArr

内层循环创建一个集合,外层循环将创建的集合推送到setsArr。在再次执行之前,我清空了 temp 数组。所以这种情况一直持续下去。

但这行不通。我肯定错过了什么。有帮助吗?

function gen() {
    var cols = document.getElementById("cols").value;
    var sets = document.getElementById("sets").value;
    var max = document.getElementById("max").value;

    var setsArr = [];
    var temp    = [];

    for (var i = 0; i < sets; i++) {
        for (var j = 0; j < cols; j++) {
            var num = Math.floor(Math.random() * max);
            temp.push(num);
        }
        setsArr.push(temp);
        temp.length = 0;
    }

    console.log(setsArr);
}

最佳答案

当您将 temp 数组推送到 setsArr 时,它不是被复制而是被引用。清空它会清空 setsArr 中的数组。此外,当始终推送相同的数组时,您将得到 setsArr[0] == setsArr[1]...

相反,在每次迭代时创建一个新的数组对象:

var setsArr = [];

for (var i = 0; i < sets; i++) {
    var temp = [];
    for (var j = 0; j < cols; j++) {
        var num = Math.floor(Math.random() * max);
        temp.push(num);
    }
    setsArr.push(temp);
}

关于javascript - 循环中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22619720/

相关文章:

c - 冒泡排序使数组为空

具有数组值的 Ruby 哈希

loops - 批处理脚本 - 遍历参数

c - 循环遍历条件

javascript - 是否可以使用javascript加载数据表

javascript - 基于选择元素和 knockout 的 Sammy 路线

JavaScript/jQuery 在两个输入字段都填写时专门更改标签的类

javascript - 像 Q 一样定义空的 Bluebird promise

C将未知大小的数组传递给单个变量中的函数

python - 迭代 Django Rest API 并获取错误