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 mdArray = MultiArray(3,3,3);
创建一个3x3x3元素的3D数组。但是在尝试这种方法时我得到Max调用堆栈大小,是否有更好的方法来制作这样的多维数组函数?
答案 0 :(得分:0)
在你的内心MultiArray
中,你总是有一个param.array
有一个项目,这会产生无休止的递归。
答案 1 :(得分:0)
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;
};
})();
上面的代码是正确的,原始代码完全错误导致无限递归循环,现在它按预期工作,var mdArray = MultiArray(2,3,4,5);
创建一个尺寸为2x3x4x5的数组。当参数中的dims
数组长度为零时,递归函数现在立即返回。