创建一个小应用程序来生成随机数。请参阅小提琴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);
}
答案 0 :(得分:2)
当您将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);
}
答案 1 :(得分:1)
的 jsFiddle Demo
强> 的
将数组的长度设置为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
}
答案 2 :(得分:0)
问题在于这一行:
temp.length = 0;
将数组长度设置为0会清除其内容。这就是你的数组为空的原因。
答案 3 :(得分:0)
使用局部变量,然后删除局部变量,不要等待垃圾收集器。
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);
delete temp;
}
答案 4 :(得分:0)
var generate = document.getElementById("generate");
generate.onclick = gen;
function gen() {
var cols = document.getElementById("cols").value;
var sets = document.getElementById("sets").value;
var max = document.getElementById("max").value;
var setsArr = new Array();
for (var i = 0; i < sets; i++) {
setsArr[i] = new Array();
for (var j = 0; j < cols; j++) {
var num = Math.floor(Math.random() * max);
setsArr[i][j]=num;
}
}
console.log(setsArr);
}
现在它的工作正常我更新了你的小提琴