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

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


当前回答

如何创建空二维数组(一行)

Array.from(Array(2), () => new Array(4))

2和4分别是一维和二维。

我们使用了Array.from,它可以接受一个类似数组的参数和每个元素的可选映射。

Array.from(arrayLike[, mapFn[, thisArg]])

var arr = Array.from(Array(2), () => new Array(4)); Arr [0][0] = 'foo'; console.info (arr);

同样的技巧可以用于创建包含1…N的JavaScript数组


或者(但当n = 10,000时效率更低,为12%)

Array(2).fill(null).map(() => Array(4))

性能下降的原因是我们必须初始化第一个维度的值才能运行.map。记住,数组不会分配位置,直到你通过.fill或直接赋值对它进行排序。

var arr =阵列(2).fill (null) . map(() = >阵列(4)); Arr [0][0] = 'foo'; console.info (arr);


跟进

这里有一个方法看起来是正确的,但有问题。

 Array(2).fill(Array(4)); // BAD! Rows are copied by reference

虽然它确实返回了显然需要的二维数组([[<4空项>],[<4空项>]]),但有一个问题:一维数组是通过引用复制的。这意味着arr[0][0] = 'foo'实际上会改变两行而不是一行。

var arr =数组(2).fill(数组(4)); Arr [0][0] = 'foo'; console.info (arr); console.info (arr [0] [0], arr [1] [0]);

其他回答

Javascript只有一维数组,但正如其他人指出的那样,你可以构建数组的数组。

下面的函数可以用来构造一个固定维度的二维数组:

function Create2DArray(rows) {
  var arr = [];

  for (var i=0;i<rows;i++) {
     arr[i] = [];
  }

  return arr;
}

列的数量其实并不重要,因为在使用数组之前不需要指定数组的大小。

然后你可以调用:

var arr = Create2DArray(100);

arr[50][2] = 5;
arr[70][5] = 7454;
// ...

我的解决方案不会是最好的,但只是给出我的解决方案来创建用户定义的多维数组。

这个函数接受行和列,

function createArray(row,column) {
let arr = [];

for(var i=0; i<row; i++){
    arr[i] = [Math.floor(Math.random() * (10))];

    for(var j=0;j<column;j++){
        arr[i][j]= [Math.floor(Math.random() * (20))];
    }
}

return arr;
}

var arrVal = createArray(4, 5);

console.log(arrVal);

在一些注释中提到了这一点,但是使用array .fill()将有助于构造一个2-d数组:

function create2dArr(x,y) {
    var arr = [];
    for(var i = 0; i < y; i++) {
        arr.push(Array(x).fill(0));
    }
    return arr; 
}

这将在返回的数组中生成一个长度为x, y的数组。

还有另一种解决方案,它不强迫你预先定义2d数组的大小,而且非常简洁。

Var表= {} table[[1,2]] = 3 //注意双[[and]] Console.log (table[[1,2]]) // -> 3 .单击“确定”

这是因为,[1,2]被转换为一个字符串,用作表对象的字符串键。

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


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

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