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;
};
})();