如何在javascript中创建空的2d数组?

mek*_*eks 21 javascript

如何在Javascript中创建一个空的2D数组(不知道新数组中将有多少行或列)?

如果它是一个简单的数组,var newArray = new Array();我可以分配尽可能多的元素.但是2D阵列怎么样?我可以创建一个而不指定行数和列数吗?以及如何在(myArray[0][1]myArray[0,1])之后访问元素?

And*_*dré 51

你可以像这样创建一个6 x 6的空数组:

var myGrid = [...Array(6)].map(e => Array(6));
Run Code Online (Sandbox Code Playgroud)
  • Array(6)生成一个长度= 6且undefined值为满的数组.
  • 我们将该数组映射到另一个充满undefined值的数组.
  • 最后,我们得到一个6x6网格的undefined位置.

如果需要使用默认值初始化网格:

var value = 'foo'; // by default
var myGrid = [...Array(6)].map(e => Array(6).fill(value));
Run Code Online (Sandbox Code Playgroud)

现在你有一个6 x 6网格'foo'.

  • 这里被低估的技巧^^^适用于任意2D数组.这里是可重用的形式:`const create2dArray =(rows,columns)=> [... Array(rows).keys()].map(i => Array(columns))` (5认同)
  • @nog642 你不能迭代由 `Array(6)` 产生的数组,因为它没有元素,但是 `[...Array(6)]` 产生的数组包含 6 个未定义的元素,你可以迭代/映射它们 (4认同)
  • 进一步的解释会很好;) (3认同)
  • 使用 `[...Array(6)]` 而不是仅仅使用 `Array(6)` 有什么意义? (3认同)
  • 您不需要地图函数中的“e”。您可以使用空括号:`.map( () => Array(6).fill(value)` (2认同)

Sia*_*agh 21

是的,您可以创建一个空数组,然后将数据推入其中.无需在JavaScript中首先定义长度.
查看jsFiddle现场演示

定义:

var arr = [[],[]];
Run Code Online (Sandbox Code Playgroud)

推送数据:

arr[0][2] = 'Hi Mr.A';
arr[1][3] = 'Hi Mr.B';
Run Code Online (Sandbox Code Playgroud)

读取数据:

alert(arr[0][2]);
alert(arr[1][3]);
Run Code Online (Sandbox Code Playgroud)

  • 不完全是……不。这只有效,因为第一个索引会递增每个分配。如果您尝试 arr[7][7] = 'Hi Mr.C' 那么您会收到“无法设置属性”错误 (2认同)

Guf*_*ffa 13

Javascript中没有二维数组.

要实现二维数组的效果,可以使用数组数组,也称为锯齿数组(因为内部数组可以具有不同的长度).

像任何其他空数组一样创建一个空的锯齿状数组:

var myArray = new Array();
Run Code Online (Sandbox Code Playgroud)

您还可以使用空数组文字:

var myArray = [];
Run Code Online (Sandbox Code Playgroud)

要将任何项放入锯齿状数组中,首先必须将内部数组放入其中,例如:

myArray.push([]);
myArray[0][0] = 'hello';
Run Code Online (Sandbox Code Playgroud)

您还可以从start创建一个包含许多空数组的数组:

var myArray = [[],[],[]];
Run Code Online (Sandbox Code Playgroud)

这给你一个没有任何项目的锯齿状数组,但是它准备了三个内部数组.

由于它是一个数组数组,您可以使用它来访问这些项目myArray[0][1].


Noa*_*man 7

假设您想制作一个100x100的二维数组(即矩阵),您可以在一行中完成,如下所示:

__CODE__

这将创建一个100x100的NULL矩阵.将100x100替换为您想要的任何尺寸,将null替换为您喜欢的任何默认值,或者将null替换为undefined.