我一直在网上阅读,一些地方说这是不可能的,一些地方说这是可能的,然后给出一个例子,另一些地方反驳这个例子,等等。

如何在JavaScript中声明一个2维数组?(假设这是可能的) 我如何访问它的成员?(myArray[0][1] or myArray[0,1]?)


当前回答

很少有人会使用“推”: 为了带来一些新的东西,我将向您展示如何用一些值初始化矩阵,例如:0或空字符串“”。 提醒一下,如果你有一个10个元素的数组,在javascript的最后一个索引将是9!

function matrix( rows, cols, defaultValue){

  var arr = [];

  // Creates all lines:
  for(var i=0; i < rows; i++){

      // Creates an empty line
      arr.push([]);

      // Adds cols to the empty line:
      arr[i].push( new Array(cols));

      for(var j=0; j < cols; j++){
        // Initializes:
        arr[i][j] = defaultValue;
      }
  }

return arr;
}

使用例子:

x = matrix( 2 , 3,''); // 2 lines, 3 cols filled with empty string
y = matrix( 10, 5, 0);// 10 lines, 5 cols filled with 0

其他回答

最简单的方法:

var arr  = [];

var arr1 = ['00','01'];
var arr2 = ['10','11'];
var arr3 = ['20','21'];

arr.push(arr1);
arr.push(arr2);
arr.push(arr3);

alert(arr[0][1]); // '01'
alert(arr[1][1]); // '11'
alert(arr[2][0]); // '20'

我的解决方案不会是最好的,但只是给出我的解决方案来创建用户定义的多维数组。

这个函数接受行和列,

function createArray(row,column) {
let arr = [];

for(var i=0; i<row; i++){
    arr[i] = [Math.floor(Math.random() * (10))];

    for(var j=0;j<column;j++){
        arr[i][j]= [Math.floor(Math.random() * (20))];
    }
}

return arr;
}

var arrVal = createArray(4, 5);

console.log(arrVal);

这是我发现的一个制作二维数组的快速方法。

function createArray(x, y) {
    return Array.apply(null, Array(x)).map(e => Array(y));
}

您还可以轻松地将该函数转换为ES5函数。

function createArray(x, y) {
    return Array.apply(null, Array(x)).map(function(e) {
        return Array(y);
    });
}

为什么这样工作:新的Array(n)构造函数创建了一个带有Array原型的对象。原型,然后分配对象的长度,导致一个未填充的数组。由于它缺乏实际成员,我们不能在它上运行Array.prototype.map函数。

然而,当您向构造函数提供多个参数时,例如执行Array(1,2,3,4)时,构造函数将使用arguments对象正确地实例化和填充Array对象。

因此,我们可以使用Array。apply(null, Array(x)),因为apply函数会将参数分散到构造函数中。为了澄清,执行Array。apply(null, Array(3))等价于执行Array(null, null, null)。

现在我们已经创建了一个实际的填充数组,我们所需要做的就是调用map并创建第二层(y)。

使用数组推导式

在JavaScript 1.7及更高版本中,您可以使用数组推导式来创建二维数组。您还可以在填充数组时过滤和/或操作条目,而不必使用循环。

var rows = [1, 2, 3];
var cols = ["a", "b", "c", "d"];

var grid = [ for (r of rows) [ for (c of cols) r+c ] ];

/* 
         grid = [
            ["1a","1b","1c","1d"],
            ["2a","2b","2c","2d"],
            ["3a","3b","3c","3d"]
         ]
*/

您可以创建任何n x m的数组,并通过调用填充默认值

var default = 0;  // your 2d array will be filled with this value
var n_dim = 2;
var m_dim = 7; 

var arr = [ for (n of Array(n_dim)) [ for (m of Array(m_dim) default ]] 
/* 
         arr = [
            [0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0],
         ]
*/

更多示例和文档可以在这里找到。

请注意,这还不是一个标准功能。

这是我的多维数组的实现。

在这种方法中,我创建了一个一维数组

我已经添加了一个原型函数多数组对象,它可以用来创建任何维度的数组。

我还为数组对象添加了一个原型函数索引,用于从多维索引中获取线性数组的索引。

创建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)]);