我已经声明了一个二维数组,如下所示:
a = [[]]
但是,当我尝试使用 0 以外的第一个维度索引给出第二个维度值时,它不起作用:
a[1][0] = "foo" //returns error
有没有比手动将所需的每个索引定义为数组更好的方法,即:
a[1] = [];
a[2] = [];
a[3] = [];
//et cetera
我已经声明了一个二维数组,如下所示:
a = [[]]
但是,当我尝试使用 0 以外的第一个维度索引给出第二个维度值时,它不起作用:
a[1][0] = "foo" //returns error
有没有比手动将所需的每个索引定义为数组更好的方法,即:
a[1] = [];
a[2] = [];
a[3] = [];
//et cetera
javascript 中不存在 N 维数组 - 您只需制作包含数组作为元素的数组。
您收到错误是因为a = [[]];
声明了一个包含一个元素的数组,而该元素恰好也是一个数组。因此a[0]
是内部数组,但a[1]
不存在,因为您从未声明过它。正确声明“二维数组”的最简单方法是使用循环:
var outerArray = [];
var numInternalArrays = 5;
for (var i = 0; i < numInternalArrays; i++) {
outerArray[i] = [];
}
如果你知道根数组应该有多少个元素,你可以这样做:
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
由于javascript没有块作用域,因此无需在for循环之外声明,它将被添加到执行它的作用域中。
a = [[]]
这是一个数组,第一项是数组。这就是为什么索引到第一项仍然有效(a[0][0])。
如果要将第二项作为数组访问,则需要将数组创建为
a = [[],[]]
有关如何在 JavaScript 中创建二维数组的示例,请参阅此问题 ?
如果我理解正确,请使用循环:
for (var i = y; i--; a[i] = []);
javascript 中没有多维数组。
您正在做的是一个数组数组,但最外面的数组只有一个元素(即元素 0),其值是另一个数组。所以 a[1](或更一般地 a[1][x])是无效的,因为最外面的数组只有一个元素。
所以你可以做 a[0][x] = "foo" 但不能反过来。
因此,您可以使用 for 循环初始化数组,也可以执行类似 var a =[[][][][][]]; 之类的操作。
您可以让数组数组以如下方式开始:
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”,我只是不知道一个空数组或一个包含一个空字符串元素的数组是否被认为是假的. 因此,您必须进行一些实验,以准确检测丢失的行数组,以便将其添加进去。