从函数中获取多维数组

时间:2012-04-18 12:09:00

标签: javascript multidimensional-array

我正在尝试将多维数组初始化为函数的值。我试过了,但结果并不是我所期待的。

elemSize 是一个包含维度的数组, init 是每个元素的值。

function MakeArray(elemSize, init) {
    var a = [];

    for (var i = 0; i < elemSize.length; i++) {
        var aj = [];
        for (var j = 0; j < elemSize[i]; j++) {
            aj[j] = init;
        }
        a[i] = aj;
    }

    return a;
}

这是结果

>>> var a = MakeArray([3,2], 5);
undefined
>>> a
[[5, 5, 5], [5, 5]]

但我会得到:

[[5 5] [5 5] [5 5]]

3 个答案:

答案 0 :(得分:1)

你的逻辑有点不对劲。这是输出所需内容的代码(三个包含两个元素的数组):

function MakeArray(elemSize, init) {
    var a = [];

    for (var i = 0; i < elemSize[0]; i++) {
        var aj = [];
        for (var j = 0; j < elemSize[1]; j++) {
            aj[j] = init;
        }
        a[i] = aj;
    }

    return a;
}

elemSize的第一个元素表示数组的数量,第二个元素表示每个数组的长度。

答案 1 :(得分:0)

不要遍历elemSize.lengthelemSize[i]elemSize[0]elemSize[1]

function MakeArray(elemSize, init) {
    var a = [];

    for (var i = 0; i < elemSize[0]; i++) {
        var aj = [];
        for (var j = 0; j < elemSize[1]; j++) {
            aj[j] = init;
        }
        a[i] = aj;
    }

    return a;
}

如果你想要一个真正的多维数组,那么你必须创建一个递归函数,因为你的循环方法对此不起作用:

function MakeArray(elemSize,init){
    if(elemSize.length === 0)
        return init;

    var result = [];
    var otherSize = elemSize.slice(1);
    var otherArray = MakeArray(otherSize,init); 
    for(var i = 0; i < elemSize[0]; ++i){
        result.push(otherArray);
    }
    return result;
}

var myArray = MakeArray([5,5,5],2);

答案 2 :(得分:0)

您需要一个递归算法来创建具有任意维数的数组。

function MakeArray(sizes, init) {
    var a = [];
    if (sizes.length > 1) {
        var b = sizes.slice(1);
        for (var i = 0; i < sizes[0]; i++) {
            a.push( MakeArray(b, init) );
        }
    } else {
        for (var i = 0; i < sizes[0]; i++) {
            a.push( init );
        }
    }
    return a;
}