Javascript 如何创建一个锯齿状数组,该数组在具有随机值的数组中生成随机数量的数组?
var数组=[]; var列表=; forvar i=0;iJavascript 如何创建一个锯齿状数组,该数组在具有随机值的数组中生成随机数量的数组?,javascript,arrays,html,multidimensional-array,jagged-arrays,Javascript,Arrays,Html,Multidimensional Array,Jagged Arrays,var数组=[]; var列表=; forvar i=0;i
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;
}
编辑
我将尝试解释为什么您的代码不起作用
forvar i=0;i array[i] = [parseInt(Math.random() * 10)];
为数组[0]分配了一个长度为1且包含一个单位数整数的数组,假设它是5,则该数组看起来像[[5]]。然后:
for(var j = 0; j < array[i].length; j++){
因此,这将在数组[0][0]的值上添加一个数字,该值为5,现在可能是8,因此有一个如下数组:
[[8]]
由于数组的长度仍然只有1,并且j也增加到1,因此循环结束
请注意,如果您使用:
array[i][j].push(parseInt(Math.random() * 10));
你将有一个无限循环,因为你将以与增加j相同的速率增加数组的长度,并且它将始终是j+1
for (var j=0, jLimt = parseInt(Math.random()*10); j<jLimt; j++)
我认为您遇到了麻烦,因为您在for循环的每次迭代中都会重新计算一个随机值 更简单的是。我注意到你的代码做得太多了。它创建随机数组,创建随机数组的随机数组,创建HTML,字符串连接HTML,以及修改DOM。一个概念函数要做的事情太多了。将逻辑分解为单个责任函数,并将它们组合在一起如何乙醚: 函数随机值偏移{ 返回Math.floorMath.random*offset | | 10; } 函数随机排列,值fn{ var i,arr=[]; 大小=随机值大小| | 20+1; 对于i=0;i
for (var j=0, jLimt = parseInt(Math.random()*10); j<jLimt; j++)