我一直在网上阅读,一些地方说这是不可能的,一些地方说这是可能的,然后给出一个例子,另一些地方反驳这个例子,等等。
如何在JavaScript中声明一个2维数组?(假设这是可能的) 我如何访问它的成员?(myArray[0][1] or myArray[0,1]?)
我一直在网上阅读,一些地方说这是不可能的,一些地方说这是可能的,然后给出一个例子,另一些地方反驳这个例子,等等。
如何在JavaScript中声明一个2维数组?(假设这是可能的) 我如何访问它的成员?(myArray[0][1] or myArray[0,1]?)
当前回答
二维数组的创建方式与一维数组相同。你像数组[0][1]一样访问它们。
var arr = [1, 2, [3, 4], 5];
alert (arr[2][1]); //alerts "4"
其他回答
这是我的多维数组的实现。
在这种方法中,我创建了一个一维数组
我已经添加了一个原型函数多数组对象,它可以用来创建任何维度的数组。
我还为数组对象添加了一个原型函数索引,用于从多维索引中获取线性数组的索引。
创建Array
//Equivalent to arr[I][J][K]..[] in C
var arr = new Array().multi(I,J,K,..);
在任意索引处访问数组值
//Equivalent in C arr[i][j][k];
var vaue = arr[arr.index(i,j,k)];
片段
/* 存储数组为一维 使用Array.index(i,j,k,…) * / Array.prototype.multi = function(){ 这一点。Multi_size =参数; 这一点。Multi_len = 1 对于(参数的关键字)这个。Multi_len *= parameters [key]; (var i=0;i<this.multi_len;i++) this.push(0); 返回; } Array.prototype.index = function(){ Var _size = this.multi_len; Var temp = 1; Var指数= 0; 对于(参数中的关键字){ 临时* = this.multi_size(例子); 索引+ =(参数(例子)* (_size / temp)) } 返回索引; } //现在你可以使用多维数组 //一个3x3 2D矩阵 var ar2d = new Array().multi(3,3);//一个2D数组 Arr2d [Arr2d .index(1,1,1)] = 5; console.log (arr2d [arr2d.index (1 1 1)]); //一个3x3x3 3D矩阵 var arr3d = new Array().multi(3,3,3);//一个3D数组 Arr3d [Arr3d .index(1,1,1)] = 5; console.log (arr3d [arr3d.index (1 1 1)]); //一个4x3x3 4D矩阵 var arr4d = new Array().multi(4,3,3,3);//一个4D数组 Arr4d [Arr4d .index(4,0,0,1)] = 5; console.log (arr4d [arr4d.index (4 0 0,1)]);
您可以分配一个行数组,其中每一行都是相同长度的数组。或者你也可以用rows*columns元素分配一个一维数组,并定义方法将行/列坐标映射到元素索引。
无论选择哪种实现,如果将其包装在对象中,则可以在原型中定义访问器方法,从而使API易于使用。
我发现这段代码适合我:
var map = [
[]
];
mapWidth = 50;
mapHeight = 50;
fillEmptyMap(map, mapWidth, mapHeight);
...
function fillEmptyMap(array, width, height) {
for (var x = 0; x < width; x++) {
array[x] = [];
for (var y = 0; y < height; y++) {
array[x][y] = [0];
}
}
}
下面,创建一个5x5矩阵,并将其填充为null
Var md = []; (var = 0;我< 5;我+ +){ md.push(新数组(5).fill (null)); } console.log (md);
这并不是一个真正的答案,但也许根本就不要使用多维数组。你可以很容易地做一个更大的一维数组,并将索引器相乘,并通过该值进行索引!在我看来,那里更干净。