var array = [];
var list = "<ul>";
for(var i = 0; i < parseInt(Math.random() * 20); i++){
array[i] = [parseInt(Math.random() * 10)];
list += "<li>" + array[i];
for(var j = 0; j < array[i].length; j++){
array[i][j] += parseInt(Math.random() * 10);
list += " " + array[i][j];
}
list += "</li>"
}
list += "</ul>"
document.getElementById("print").innerHTML += list;
&#13;
<div id="print">
</div>
&#13;
我的目标是创建一个锯齿状阵列。
我想初始化一个数组,并在包含随机数的初始数组中创建随机数组。
我正在寻找的输出是这样的:
..但是当我运行代码时,到目前为止,每次运行程序时,我只会收到两列随机整数。我该如何解决这个问题?
答案 0 :(得分:0)
此代码应生成您要查找的数组类型。
function createRandomArray(){
//Create empty Array
var out=[];
//random element count for outer array
var outerLength=parseInt(Math.random()*20)+1;
//fill outer array with random arrays
for(var i=0;i<outerLength;i++){
//inner element count and initialisation
var innerLength=parseInt(Math.random()*10)+1;
var inner=[];
for(var j=0;j<innerLength;j++){
//fill the inner array with random numbers
inner.push(parseInt(Math.random()*10)+1);
}
//add the inner array to the outer array
out.push(inner);
}
return out;
}
修改强>
我将尝试解释您的代码无效的原因
for(var i = 0; i < parseInt(Math.random() * 20); i++){
在每次循环迭代中,Math.random
部分再次执行。你应该把它保存在一个额外的变量中。
array[i] = [parseInt(Math.random() * 10)];
使用一个随机数
初始化子数组 for(var j = 0; j < array[i].length; j++){
迭代这个子数组(只有一个元素)。所以这个循环每个子数组只调用一次。因此,每个Array都有2个元素
答案 1 :(得分:0)
当你这样做时:
array[i] = [parseInt(Math.random() * 10)];
array [0] 被分配一个长度为1且包含单个数字整数的数组,假设它为5,因此 array 看起来像[[5]]
。然后:
for(var j = 0; j < array[i].length; j++){
请注意 array [i] .length 为1。
array[i][j] += parseInt(Math.random() * 10);
因此,这会在 array [0] [0] 的值中添加一个数字,该值为5,现在可能为8,因此您有一个类似的数组:
[[8]]
由于 array 的长度仍为1,而 j 也增加为1,因此循环结束。
请注意,如果您使用:
array[i][j].push(parseInt(Math.random() * 10));
你将有一个无限循环,因为你将以增加j的相同速率增加数组的长度,它将始终是j + 1.你需要将 j 设置为静态价值,例如
for (var j=0, jLimt = parseInt(Math.random()*10); j<jLimt; j++)
答案 2 :(得分:0)
我认为你遇到了麻烦,因为你在for循环的每次迭代中重新计算一个随机值。
这更容易。我注意到的一件事是你的代码做得太多了。它正在创建随机数组,创建随机数组的随机数组,创建HTML,连接HTML的字符串以及改变DOM。对于一个概念性函数来说,这是很多的事情。如何将逻辑分解为单一责任函数并将它们组合在一起:
function randomValue(offset) {
return Math.floor(Math.random() * (offset || 10));
}
function randomArray(size, valueFn) {
var i, arr = [];
size = randomValue(size || 20) + 1;
for (i = 0; i < size; i++) {
arr.push(valueFn());
}
return arr;
}
function randomJaggedArray(size, offset) {
return randomArray(size, function() {
return randomArray(size, function() {
return randomValue(offset);
});
});
}
function toHTML(arr) {
var html = '<ul>';
html += arr.map(function(value) {
var li = '<li>';
if (typeof value === 'number') {
li += '' + value;
} else {
li += value.join(' ');
}
li += '</li>';
return li;
}).join('');
html += '</ul>';
return html;
}
document.getElementById('print').innerHTML = toHTML(randomJaggedArray(20, 10));
<div id="print"></div>