1
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 call stack size exceeded,有没有更好的方法来制作这样的多维数组函数?

4

2 回答 2

0

在你的内部MultiArray,你总是有一个param.array带有 1 的项目,这会产生无穷无尽的递归。

于 2012-10-31T10:35:51.730 回答
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当参数中的数组长度为零时,递归函数现在立即返回。

于 2012-10-31T17:05:55.307 回答