如何在JavaScript中声明二维数组?

21

我想知道如何在JavaScript中声明定长的二维数组,类似于以下方式:

var array = new Array[this.rows, this.columns];

之后我想获得每个维度的长度,例如:

array[0].length; // I am assuming this would give me the first dimension like in C# array.GetLength(0);
array[1].length; // I am assuming this would give me the second dimension like in C# array.GetLength(1);
5个回答

36

@SLaks所提到的锯齿数组的一个简单示例。基本上是在数组中嵌套另一个数组。以下示例展示了创建一个100x100数组的一种方法。

var arr = [];
for(var x = 0; x < 100; x++){
    arr[x] = [];    
    for(var y = 0; y < 100; y++){ 
        arr[x][y] = x*y;    
    }    
}

console.log(arr[10][11]);

实时演示

这种方法非常灵活,例如 arr[4] 可以有一个索引为10的数组,arr[5] 可以有一个只有1个值的数组,甚至可以是完全不同的类型,比如字符串或数字。


嗨Loktar,谢谢你。我喜欢这个演示,那么如何获取数组的维度?第一维和第二维是什么? - user677607
1
假设数组长度相等(想象一个8x8的棋盘),您可以使用arr.lengtharr[0].length。这将是“宽度”和“高度”。 - Loktar
1
如果仍有人在寻找答案,则以下是一行代码,var array = Array(y).fill().map(entry => Array(x))。 其中: //x = 列数 //y = 行数 - Kevin Ng

5
一个嵌套的 3x3 数组(值为 undefined):

var arr = new Array(3);
for (var i = 0; i < arr.length; ++i) {
  arr[i] = new Array(3);
}

console.log(arr);


modle13评论说你受限于固定大小的子数组,因此这里有一个快速调整方法可以解决这个问题:

var nestedSizes = [3,5,1,4];
var arr = new Array(nestedSizes.length);
for (var i = 0; i < arr.length; ++i) {
  arr[i] = new Array(nestedSizes[i]);
}

console.log(arr);


我的答案哪里不对了? - c24w
适用于我的目的:井字棋React教程。一个争议可能是你对每个子数组的索引数量受到限制。 - modle13

2
在JavaScript中:
var Matrix = function (rows, columns)  {
    this.rows = rows;
    this.columns = columns;
    this.myarray = new Array(this.rows);
    for (var i=0; i < this.columns; i +=1) {
        this.myarray[i]=new Array(this.rows)
    }
    return this.myarray;
}

var m = new Matrix(2,2);
m; // [[undefined, undefined], [undefined, undefined]];

var m2 = new Matrix(3,3);
m2; // [[undefined, undefined, undefined], [undefined, undefined, undefined], [undefined, undefined, undefined]]

仅在行数和列数相等时有效。将for循环更改为for(var i = 0; i <this.rows; i + = 1){this.myarray [i] = new Array(this.columns);} - prit4fun

2

与C#不同,Javascript不支持多维数组。

相反,您可以使用嵌套的(“锯齿状”)数组。


谢谢Slaks,我如何获取每个维度的长度? - user677607
2
每个维度的长度都不确定,它只是一个数组的数组;每个数组都有自己的长度。 - SLaks
1
"Javascript不支持多维数组" - 但是数组的数组提供了等效的多维数组,因此您可以说JavaScript支持多维数组(即使它们不是真正的多维数组,我认为您的第一句话在这种形式上不是真正正确的 :))。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Predefined_Core_Objects#Multi-Dimensional_Arrays(顺便说一句,我认为您的答案并没有真正回答问题。;)) - Sk8erPeter

-4

你不能就像这样做吗?

var x = new Array(4);             #1st array, array of arrays                              
y = new Array(1, 4, 2, 0);       #2nd dimension of arrays, an array of values                  
z = new Array(4, 8, 3, 9);       #^^^                       
a = new Array(7, 0, 2, 4);       #^^^                  
t = new Array(9, 0, 3, 1);        #^^^

访问数组a(3)中的7(第一个值),你可以输入以下代码:

var example = x.3.1

如果这个不起作用,请告诉我,因为这是我被告知并现在用来编写我的游戏的方法。

2
错误...这样行不通。你这里有5个完全没有关联的不同数组。 - Tony Carbone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接