0

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

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]]
4

3 回答 3

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 的第一个元素表示数组的数量,第二个元素表示每个数组的长度。

于 2012-04-18T12:13:37.410 回答
0

不要迭代elemSize.lengthandelemSize[i]但是 elemSize[0]and 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);
于 2012-04-18T12:13:31.213 回答
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;
}
于 2012-04-18T12:19:09.110 回答