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

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


当前回答

递归函数创建多维数组:

var makeArray = function (dims, arr) {          
    if (dims[1] === undefined) {
        return new Array(dims[0]);
    }

    arr = new Array(dims[0]);

    for (var i=0; i<dims[0]; i++) {
        arr[i] = new Array(dims[1]);
        arr[i] = makeArray(dims.slice(1), arr[i]);
    }

    return arr;
}

构建一个2x3x4x2的4D-Array:

var array = makeArray([2, 3, 4, 2]);    

其他回答

最简单的方法:

var myArray = [[]];

Javascript不支持二维数组,相反,我们将一个数组存储在另一个数组中,并根据您想访问的数组的位置从该数组中获取数据。记住数组编号从0开始。

代码示例:

/* Two dimensional array that's 5 x 5 

       C0 C1 C2 C3 C4 
    R0[1][1][1][1][1] 
    R1[1][1][1][1][1] 
    R2[1][1][1][1][1] 
    R3[1][1][1][1][1] 
    R4[1][1][1][1][1] 
*/

var row0 = [1,1,1,1,1],
    row1 = [1,1,1,1,1],
    row2 = [1,1,1,1,1],
    row3 = [1,1,1,1,1],
    row4 = [1,1,1,1,1];

var table = [row0,row1,row2,row3,row4];
console.log(table[0][0]); // Get the first item in the array

如果你是在谷歌图表的2D数组,最好的方法是

var finalData = [];
[["key",value], ["2013-8-5", 13.5], ["2013-7-29",19.7]...]

指的是 不是一个有效的2d数组谷歌图表

如果你想要的是一个4x4矩阵,看看DOMMatrix,它很容易使用,我可以说,

let m = new DOMMatrix(); 
// m.m11, m.m12, m.m13, m.m14, ..., m.m41, m.m42, m.m43, m.m44

最初由于不同的原因,它在node.js上不可用,并且仅限于4x4。

你也可以考虑使用一个自动激活对象,而不是JS的数组,看看我的答案,但这里也带来了更多的说服力:

var tree = () => new Proxy({}, { get: (target, name) => name in target ? target[name] : target[name] = tree() });

var t = tree();
t[0][2][3] = 4;
console.log(t[0][2][3]);

它使用新的JS和行为不正确时,你迭代它,所以要小心它。

如果你需要一个灵活的多维数组生成器,也可以看看这个。

这并不是一个真正的答案,但也许根本就不要使用多维数组。你可以很容易地做一个更大的一维数组,并将索引器相乘,并通过该值进行索引!在我看来,那里更干净。