Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建一个锯齿状数组,该数组在具有随机值的数组中生成随机数量的数组?_Javascript_Arrays_Html_Multidimensional Array_Jagged Arrays - Fatal编程技术网

Javascript 如何创建一个锯齿状数组,该数组在具有随机值的数组中生成随机数量的数组?

Javascript 如何创建一个锯齿状数组,该数组在具有随机值的数组中生成随机数量的数组?,javascript,arrays,html,multidimensional-array,jagged-arrays,Javascript,Arrays,Html,Multidimensional Array,Jagged Arrays,var数组=[]; var列表=; forvar i=0;i

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 在每次循环迭代中,Math.random部分都会再次执行。您应该将其保存在一个额外的变量中

数组[i]=[parseIntMath.random*10]

使用一个随机数初始化子数组

forvar j=0;j 并在只有一个元素的子数组上迭代。因此,每个子数组只调用一次此循环。因此,执行以下操作时,每个数组正好有2个元素:

  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;ifor (var j=0, jLimt = parseInt(Math.random()*10); j<jLimt; j++)