Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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最大调用堆栈超出解释 var MultiArray=(函数(){ var MultiArray=函数(参数){ var i=param.array.length; 而(我--){ 参数数组[i]=多数组({ 数组:新数组(dims[0]), 尺寸:尺寸拼接(1,尺寸长度-1) }); } 返回参数数组 }; 返回函数(){ var length=arguments.length-1; 数组=新数组(参数[0]), dims=[长度]; 对于(变量i=0;i_Javascript_Recursion_Multidimensional Array - Fatal编程技术网

javascript最大调用堆栈超出解释 var MultiArray=(函数(){ var MultiArray=函数(参数){ var i=param.array.length; 而(我--){ 参数数组[i]=多数组({ 数组:新数组(dims[0]), 尺寸:尺寸拼接(1,尺寸长度-1) }); } 返回参数数组 }; 返回函数(){ var length=arguments.length-1; 数组=新数组(参数[0]), dims=[长度]; 对于(变量i=0;i

javascript最大调用堆栈超出解释 var MultiArray=(函数(){ var MultiArray=函数(参数){ var i=param.array.length; 而(我--){ 参数数组[i]=多数组({ 数组:新数组(dims[0]), 尺寸:尺寸拼接(1,尺寸长度-1) }); } 返回参数数组 }; 返回函数(){ var length=arguments.length-1; 数组=新数组(参数[0]), dims=[长度]; 对于(变量i=0;i,javascript,recursion,multidimensional-array,Javascript,Recursion,Multidimensional Array,我试图编写一个函数来创建多维数组,因此var mdArray=MultiArray(3,3,3)将创建一个包含3x3个元素的3D数组。但是我在尝试这种方法时超过了最大调用堆栈大小,有没有更好的方法生成这样的多维数组函数?在您的内部多数组中,总是有一个参数数组,包含1个项,这会产生无休止的递归。var MultiArray=(function(){ var MultiArray = (function(){ var MultiArray = function(param){

我试图编写一个函数来创建多维数组,因此
var mdArray=MultiArray(3,3,3)将创建一个包含3x3个元素的3D数组。但是我在尝试这种方法时超过了最大调用堆栈大小,有没有更好的方法生成这样的多维数组函数?

在您的内部
多数组中,总是有一个
参数数组
,包含1个项,这会产生无休止的递归。

var MultiArray=(function(){
var MultiArray = (function(){

    var MultiArray = function(param){

            var i = param.array.length;
            while(i--){
                param.array[i] = MultiArray({
                array: new Array(dims[0]),
                dims: dims.splice(1,dims.length-1)
                });
            }

        return param.array

    };

    return function(){

        var length = arguments.length - 1;
            array = new Array(arguments[0]),
            dims = [length];

        for(var i = 0; i < length; i++){
            dims[i] = arguments[i+1];
        }   

        MultiArray({
            array: array,
            dims: dims
        });

        return array;
    };

})();
var MultiArray=函数(参数){ var myDims,i=param.array.length; if(param.dims.length==0){ 返回; } 而(我--){ myDims=参数dims切片(0); myDims=myDims.拼接(1,myDims.长度-1); 参数数组[i]=新数组(参数dims[0]); 多阵列({ 数组:参数数组[i], dims:myDims }); } }; 返回函数(){ var length=arguments.length-1,array=new数组(arguments[0]),dims=[length]; 对于(变量i=0;i
上面的代码是正确的原始代码完全是错误的,导致了无限递归循环,现在它按预期工作,
var mdArray=MultiArray(2,3,4,5)创建尺寸为2x3x4x5的数组。当参数中的
dims
数组长度为零时,递归函数立即返回

var MultiArray = (function() {

    var MultiArray = function(param) {

        var myDims, i = param.array.length;
        if(param.dims.length === 0){
            return;
        }
        while(i--) {
            myDims = param.dims.slice(0);
            myDims = myDims.splice(1, myDims.length - 1);
            param.array[i] = new Array(param.dims[0]);
            MultiArray({
                array : param.array[i],
                dims : myDims
            });
        }

    };

    return function() {

        var length = arguments.length - 1, array = new Array(arguments[0]), dims = [length];

        for(var i = 0; i < length; i++) {
            dims[i] = arguments[i + 1];
        }

        MultiArray({
            array : array,
            dims : dims
        });

        return array;
    };
})();