Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript二维数组_Javascript_Arrays_Multidimensional Array - Fatal编程技术网

Javascript二维数组

Javascript二维数组,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我声明了一个二维数组,如下所示: a = [[]] 但是,当我尝试使用除0以外的第一个维度索引给出第二个维度值时,它不起作用: a[1][0] = "foo" //returns error 有没有比手动将所需的每个索引定义为数组更好的方法,即: a[1] = []; a[2] = []; a[3] = []; //et cetera 如果我理解正确,请使用循环: for (var i = y; i--; a[i] = []); var outerArray = []; var numI

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

a = [[]]
但是,当我尝试使用除0以外的第一个维度索引给出第二个维度值时,它不起作用:

a[1][0] = "foo" //returns error
有没有比手动将所需的每个索引定义为数组更好的方法,即:

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

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

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

javascript中没有多维数组。
您所做的是一个数组数组,但最外层的数组只有一个值为另一个数组的元素(即元素0)。因此[1](或更一般地说是[1][x])无效,因为最外层的数组只有一个元素。
所以你可以做一个[0][x]=“foo”,但反过来不行

因此,您可以使用for循环初始化数组,或者执行类似var a=[[]]的操作

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

如果要以数组的形式访问第二个项,则需要以数组的形式创建数组

a = [[],[]]
请参见此问题以了解以下示例:
javascript中不存在N维数组-您只需创建包含数组作为元素的数组即可

您得到一个错误,因为
a=[]]
声明一个数组,其中包含一个元素,该元素恰好也是一个数组。因此
a[0]
是内部数组,但是
a[1]
不存在,因为您从未声明过它。正确声明“二维数组”的最简单方法是使用循环:

for (var i = y; i--; a[i] = []);
var outerArray = [];
var numInternalArrays = 5;
for (var i = 0; i < numInternalArrays; i++) {
    outerArray[i] = [];
}
var outerArray=[];
var Numinternalrays=5;
对于(var i=0;i
您可以按以下方式启动阵列阵列:

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中有很多东西是“false”,包括“null”和“undefined”以及“0”,我只是不知道一个空数组或一个元素为空字符串的数组是否被视为false。因此,您必须进行一些实验,以准确地检测丢失的行数组,以便将其添加到中。

如果您知道根数组应包含多少个元素,则可以执行以下操作:

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

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

a[0][0]=x
应该可以工作。它返回了什么错误?
a[0][0]=x
可以工作,但是
a[1][0]=x
不能。我的错,我是说索引不是0。让我纠正一下,Javascript没有原生的二维数组。您必须使用包含数组的数组来模拟它们。对不起,json结构不能工作吗?这是严格意义上的javascript吗?我的错又来了:我想说的是,除了以任何方式定义所有javascript之外,是否还有其他方法。我想知道JS中是否有一个魔术可以帮你。@Bluefire我仍然不完全理解你想做什么。我的回答没有帮助吗?是的,我只是想知道是否有一个本机函数可以做到这一点。@Bluefire没有。一旦你添加了这行代码,你就可以毫无错误地执行
a[1][0]=“foo”
。@David你也可以在循环中声明
a
,尽管它可能不太可读。这是有史以来最好的答案,我在读这篇文章之前不懂JavaScript,我也不懂。我曾经是一个可怜的人,不尊重我的长辈,现在我找到了所说的尊重。谢谢你,希米德,谢谢你改变了我的生活!你的行为不会被忽视的!您还可以使用jQuery提供答案吗?我听说它真的很好,并且更好地解决了这些问题。通过阅读这个答案,我的生活变得清晰了十倍。这个答案治愈了我的SPD,谢谢你给我第二次改变,我不会浪费它的!真是鼓舞人心。