【问题标题】:How do I declare two dimensional arrays in javascript? [duplicate]如何在javascript中声明二维数组? [复制]
【发布时间】:2012-04-01 05:41:49
【问题描述】:

我想知道如何在固定长度的java脚本中声明二维数组,例如,

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);

【问题讨论】:

    标签: javascript arrays multidimensional-array


    【解决方案1】:

    @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]);
    

    Live Demo

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

    【讨论】:

    • 嗨 Loktar 谢谢你 我喜欢这个演示,我如何获得数组的尺寸?第一维和第二维?
    • @Kathy 假设数组长度在数量上是相等的(想想一个 8x8 的棋盘),你可以做到 arr.lengtharr[0].length。那将是“宽度”和“高度”
    【解决方案2】:

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

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

    model13 评论说你被限制在一个固定大小的子数组中,所以这里有一个快速的调整来解决这个问题:

    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);

    【讨论】:

    • 我的回答有什么问题?
    • 适用于我的目的:tic-tac-toe React 教程。争用可能是您被限制为每个子数组的索引数量相同。
    【解决方案3】:

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

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

    【讨论】:

    • 谢谢 Slaks,我如何获得每个维度的长度?
    • 没有每个维度的长度。它只是一个数组数组;每个数组都有自己的长度。
    • "Javascript 不支持多维数组" - 但是数组数组提供了多维数组的等价物,所以你可以说 JavaScript 支持多维数组(即使它们不是 true 多维的,我认为您的第一句话在这种形式中也不是 true 正确的 :))。 developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…(顺便说一句,我认为您的回答并没有真正回答问题。;))
    【解决方案4】:

    在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
    【解决方案5】:

    你就不能这样吗?

    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
    

    如果这不起作用,请告诉我,因为这是我被告知的以及我现在用来编程我的游戏的东西

    【讨论】:

    • err...不,这行不通。您在这里拥有的是 5 个完全不相关的不同数组。
    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2013-08-12
    • 1970-01-01
    相关资源
    最近更新 更多