Javascript二维数组

Blu*_*ire 2 javascript arrays multidimensional-array

我已经声明了一个二维数组,如下所示:

a = [[]]
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用除0以外的第一个维度索引来提供第二个维度值时,它不起作用:

a[1][0] = "foo" //returns error
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来手动定义您需要作为数组的每个索引,即:

a[1] = [];
a[2] = [];
a[3] = [];
//et cetera
Run Code Online (Sandbox Code Playgroud)

jba*_*bey 8

javascript中不存在N维数组 - 您只需将包含数组的数组作为元素.

您收到错误是因为a = [[]];声明了一个包含一个元素的数组,该数组恰好也是一个数组.因此a[0]是内部数组,但a[1]由于您从未声明它,因此不存在.正确声明"二维数组"的最简单方法是使用循环:

var outerArray = [];
var numInternalArrays = 5;
for (var i = 0; i < numInternalArrays; i++) {
    outerArray[i] = [];
}
Run Code Online (Sandbox Code Playgroud)


Shm*_*dty 5

如果您知道根数组应该有多少元素,您可以执行以下操作:

var arr = 
    (Math.pow(2,10)-1).toString(2)  // Binary string of 1s. Its length being 10
    .split('')                      // Create an array from this string
    .map(function(){return [];});   // Map a new empty array to each index

console.log(arr);                   // [[],[],[],[],[],[],[],[],[],[]]
Run Code Online (Sandbox Code Playgroud)

这完成了同样的事情:

for(var arr = [], i=10; i--; arr[i]=[]);
Run Code Online (Sandbox Code Playgroud)

不需要arr在for循环之外声明,因为javascript没有块作用域,它将被添加到执行它的作用域中.

  • 这是有史以来最好的答案,我在阅读之前并不了解JavaScript而不是我.我曾经是一个悲惨的生活,不尊重我的长辈,我现在已经找到了尊重.谢谢Shmiddty,谢谢你改变了我的生活!你的行为不会被忽视! (3认同)
  • 通过阅读这个答案,我的生活清晰度增加了十倍. (2认同)
  • 这个答案已经治好了我的SPD,谢谢你给我第二次改变Shmiddty,我不会浪费它!真正鼓舞人心. (2认同)