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

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


当前回答

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

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

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

其他回答

数组的行和列的大小只有在运行时才知道,那么下面的方法可以用来创建一个动态的2d数组。

var num = '123456'; 变量行 = 3;运行时已知 var col = 2;运行时已知 是 i = 0; var array2D = [[]]; for(var r = 0; r < row; ++r) { array2D[r] = []; for(var c = 0; c < col; ++c) { array2D[r][c] = num[i++]; } } console.log(array2D); [[ '1', '2' ], [ '3', '4' ], [ '5', '6' ]] console.log(array2D[2][1]);6

我发现下面是最简单的方法:

Var array1 = [[]]; Array1 [0][100] = 5; alert (array1 [0] [100]); 警报(array1.length); alert (array1 [0] . length);

nodejs + lodash版本:

var _ = require("lodash");
var result = _.chunk(['a', 'b', 'c', 'd', 'e', 'f'], 2);
console.log(result);
console.log(result[2][0]);

输出:

[ [ 'a', 'b' ], [ 'c', 'd' ], [ 'e', 'f' ] ]
e

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

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)。

ES6+、ES2015+可以用更简单的方式做到这一点


创建3 × 2的数组,填充为true

[...Array(3)].map(item => Array(2).fill(true))