我一直在网上阅读,一些地方说这是不可能的,一些地方说这是可能的,然后给出一个例子,另一些地方反驳这个例子,等等。

如何在JavaScript中声明一个2维数组?(假设这是可能的) 我如何访问它的成员?(myArray[0][1] or myArray[0,1]?)


当前回答

类似于activa的答案,这里有一个创建n维数组的函数:

function createArray(length) {
    var arr = new Array(length || 0),
        i = length;

    if (arguments.length > 1) {
        var args = Array.prototype.slice.call(arguments, 1);
        while(i--) arr[length-1 - i] = createArray.apply(this, args);
    }

    return arr;
}

createArray();     // [] or new Array()

createArray(2);    // new Array(2)

createArray(3, 2); // [new Array(2),
                   //  new Array(2),
                   //  new Array(2)]

其他回答

二维数组的创建方式与一维数组相同。你像数组[0][1]一样访问它们。

var arr = [1, 2, [3, 4], 5];

alert (arr[2][1]); //alerts "4"

我不确定是否有人回答过这个问题,但我发现这对我很有效

var array = [[,],[,]]

eg:

var a = [[1,2],[3,4]]

例如,对于一个二维数组。

我的方法与@Bineesh的答案非常相似,但采用了更普遍的方法。

你可以这样声明双数组:

var myDoubleArray = [[]];

并以以下方式存储和访问内容:

var testArray1 = [9,8]
var testArray2 = [3,5,7,9,10]
var testArray3 = {"test":123}
var index = 0;

myDoubleArray[index++] = testArray1;
myDoubleArray[index++] = testArray2;
myDoubleArray[index++] = testArray3;

console.log(myDoubleArray[0],myDoubleArray[1][3], myDoubleArray[2]['test'],) 

这将打印预期的输出

[ 9, 8 ] 9 123

这是我发现的一个制作二维数组的快速方法。

function createArray(x, y) {
    return Array.apply(null, Array(x)).map(e => Array(y));
}

您还可以轻松地将该函数转换为ES5函数。

function createArray(x, y) {
    return Array.apply(null, Array(x)).map(function(e) {
        return Array(y);
    });
}

为什么这样工作:新的Array(n)构造函数创建了一个带有Array原型的对象。原型,然后分配对象的长度,导致一个未填充的数组。由于它缺乏实际成员,我们不能在它上运行Array.prototype.map函数。

然而,当您向构造函数提供多个参数时,例如执行Array(1,2,3,4)时,构造函数将使用arguments对象正确地实例化和填充Array对象。

因此,我们可以使用Array。apply(null, Array(x)),因为apply函数会将参数分散到构造函数中。为了澄清,执行Array。apply(null, Array(3))等价于执行Array(null, null, null)。

现在我们已经创建了一个实际的填充数组,我们所需要做的就是调用map并创建第二层(y)。

实际上呢?是的。你可以创建一个数组的数组,作为一个2D数组,因为每个项目本身就是一个数组: Let items = [ (1、2), (3、4), (5、6) ]; console.log(项目[0][0]);/ / 1 console.log(项目[0][1]);/ / 2 console.log(项目[1][0]);/ / 3 console.log(项目[1][1]);/ / 4 console.log(项目);

但从技术上讲,这只是一个数组的数组,而不是一个“真正的”2D数组,正如I. J. Kennedy指出的那样。

需要注意的是,您可以将数组嵌套到另一个数组中,从而创建“多维”数组。