2013-01-24 95 views
2

我已经声明了一个二维阵列,像这样:的Javascript二维阵列

a = [[]] 

然而,当我尝试使用除0以外的第一维指标以得到第二维值,它不工作:

a[1][0] = "foo" //returns error 

有没有解决这个更好的方式比手动定义每一个需要作为数组的索引,即:

a[1] = []; 
a[2] = []; 
a[3] = []; 
//et cetera 
+3

'a [0] [0] = x'应该有效。它返回什么错误? – 0x499602D2

+0

'a [0] [0] = x'将起作用,但'a [1] [0] = x'不会。 – Pointy

+0

我的不好,我的意思是指数不是0.让我纠正一下。 – Bluefire

回答

8

N维数组的例子中不存在这个问题, JavaScript - 你只需要将包含数组的数组作为元素。

因为a = [[]];声明了一个数组,一个元素,这恰好也是一个数组。因此a[0]是内部数组,但a[1]不存在,因为您从未声明它。正确地申报了“二维数组”最简单的方法是使用一个循环:

var outerArray = []; 
var numInternalArrays = 5; 
for (var i = 0; i < numInternalArrays; i++) { 
    outerArray[i] = []; 
} 
2

如果我理解正确,请使用循环:

for (var i = y; i--; a[i] = []); 
+0

我又坏了:我的意思是说,如果有其他方式绕过它,而不是以任何方式定义它们。我想知道JS中是否有一个魔术技巧可以帮助你。 – Bluefire

+0

@Bluefire我仍然不完全明白你想要做什么。我的回答没有帮助吗? – 0x499602D2

+0

它的确如此,我只是想知道是否有一个本地函数可以做到这一点。 – Bluefire

1

JavaScript中没有多维数组。
你在做什么是一个数组数组,但最外面的数组只有一个元素(即元素0),其值是另一个数组。所以[1](或者更一般的a [1] [x])是无效的,因为最外层的数组只有一个元素。
所以你可以做一个[0] [x] =“foo”,但不能反过来。所以你可以用for循环初始化数组,或者做一些类似var a = [[] [] [] [] []];

4
a = [[]] 

这是一个数组,第一个项目是一个数组。这是为什么索引到第一个项目仍然有效(a [0] [0])。

如果您要访问的第二个项目作为一个数组,你需要创建数组作为

a = [[],[]] 

How can I create a two dimensional array in JavaScript?

1

你可以有数组的数组开始在:

var a = []; // start with the column array 

然后,当你想要把我们可以在位置[i][j]中调用'i'行索引和'j'列索引。

if (!a[i]) { // check for row existing 
    a[i] = []; // .. and create it if not 
} 
a[i][j] = 'foo'; // put something in the array cell 

请注意,这只适用于我们在创建它之后总是将某些东西放入新行数组中。如果你在里面放置0或者“”而不是'foo',它可能不起作用。

在javascript中有很多东西是'假'包括'空'和'未定义'和'0',我只是不知道是否一个空数组或一个元素是空的数组字符串被视为错误。所以你必须做一些试验,准确地检测缺失的行数组,以便将其添加进去。

5

如果你知道root数组应该有多少个元素有,你可以做这样的事情:

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);     // [[],[],[],[],[],[],[],[],[],[]] 

这样可以完成同样的事情:

for(var arr = [], i=10; i--; arr[i]=[]); 

不需要声明arr以外的for-loop,因为javascript没有块范围,它将被添加到它的执行范围。

+3

这是有史以来最好的答案,我在阅读本书之前并不了解JavaScript,而不是阅读本书。我曾经是一个不尊重长辈的悲惨的人,现在我发现了这个尊重。谢谢Shmiddty,谢谢你把我的生活变成了现实!你的行为不会被忽视! –

+1

你也可以使用jQuery提供答案吗?我听说它非常好,更好地解决了这些问题。 –

+2

通过阅读这个答案,我生活的清晰度提高了十倍。 –