循环中的阵列
2014-03-24
103
创建一个小型应用程序来生成随机数。请参阅 此处 中的小提琴。
生成数字的函数存在问题。有 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);
}
3个回答
当您将
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);
}
Bergi
2014-03-24
将数组长度设置为 0 会影响放入父数组的每个数组。相反,在那里使用局部变量,它将每次创建一个新实例以供使用。这将正确允许唯一数组。
var setsArr = [];
for (var i = 0; i < sets; i++) {
var temp = [];//local array instantiated
for (var j = 0; j < cols; j++) {
var num = Math.floor(Math.random() * max);
temp.push(num);
}
setsArr.push(temp);//save unique array
}
Travis J
2014-03-24
问题出在这行:
temp.length = 0;
将数组长度设置为 0 会清除其内容。这就是数组为空的原因。
mbcrute
2014-03-24