13

我可以使用一些指导来指定 javascript 中的动态多维数组。我知道javascript本身并没有定义多暗淡数组,而是一个数组的数组,即。

 var items = [[1,2],[3,4],[5,6]];

或者

 var array = [[,],[,]]

或者

 var a = [[1,2],[3,4]]

我的问题是我不知道实际尺寸,并且像上面的第二个示例一样简单地定义数组,仍然不允许数组超出两个记录集。我认为有一个类似于 VB 的 REDIM stmt,但无法找到任何东西。

我的问题的另一个部分是,当我指定数组的第二维时,如下例所示,数组在 for 块之外变得无法访问。

var Exforsys=new Array(4)
for (i=0; i <4; i++) {
   Exforsys[i]=new Array(4)
}

我正在尝试从我的特定数组中检索数据,如下所示......

 function newTest() {
        var myArray = [[],[]];
      //  myArray[] = new Array(14);

        var recCount = coordsAry.length / 15;
        var n =0;

        var i = 0;
        var s = 0;

        for (i = 0; i < recCount; i++) {
            for (s = 0; s < 15; s++) {
              //  myArray[i] = new Array(14);

                myArray[i][s] = coordsAry[n];
                n++;

              //  alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));

            }
            // var u = 4;
            s = 0;

            alert(myArray[0][3]);
            alert(myArray[0][4]);

            alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));              

        }

coordsAry 有 105 条记录并且是平坦的,{"12","Frank","564", ... etc} 这已被证明。填充第二条记录后,我收到此错误....

Error: Unable to set value of the property '0': object is null or undefined.

显然,我的 javascript 技能至少可以说有点粗糙。任何示例代码将不胜感激。

谢谢,

4

4 回答 4

19

您不会将数组调暗到实际大小,

您可以将任何索引上的变量设置为您想要的任何内容

如果你想要两个维度,你可以定义一个数组

var arr = []

将一个元素设置为另一个数组

arr[0] = []

并在“第二维”中的元素内放置一个值

arr[0][10] = 10

您只有“第一维”中的元素才能成为数组

你也可以做一些事情,比如将数组放入数组中

var arr = []
var arr1 = [1,2,3]
arr[0] = arr1
console.log(arr[0][2]) //3

如果您有一个数组并且想要将元素推送到内部数组中,只需检查该元素是否已定义,例如

var arr = []
for ( var i = 0; i < 5 ; i++) {
    if(!arr[i])
        arr[i] = []
    for ( var j = 0; j < 3 ; j++)
        arr[i][j] = i + " - " + j // Or like this,
        //arr[i].push(i + " " + j) // 
}
console.log( arr[2][3]) // 2 - 3

鉴于您发布的代码

function newTest() {
    var myArray = [[],[]];
  //  myArray[] = new Array(14);

    var recCount = 15
    var n =0;

    var i = 0;
    var s = 0;

    for (i = 0; i < recCount; i++) {
        if(!myArray[i])
             myArray[i] = []
        for (s = 0; s < 15; s++) {
            console.log(i)

          //  myArray[i] = new Array(14);

            myArray[i][s] = s;
            n++;

          //  alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));

        }
        // var u = 4;
        s = 0;

        alert(myArray[0][3]);
        alert(myArray[0][4]);

        alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));              

    }
}
newTest()

这对我有用

​</p>

于 2012-12-05T14:23:30.637 回答
3

所有数组在 javascript 中都是动态的。你可以做类似的事情

var list = [];
list[15] = 15;

它会简单地将数组扩展为长度为 16,前 15 个索引的值未定义(~ null)。因此,您的 3 个多维数组示例应该都可以工作。

编辑:刚刚看到您包含您的代码。您没有初始化第一个维度的数组。你的循环应该是

for (i = 0; i < recCount; i++) {

    //If the outer array does not have an inner array at this position already, create one
    if (!myArray[i])
        myArray[i] = []; //!!!

        for (s = 0; s < 15; s++) {
          //  myArray[i] = new Array(14);

            myArray[i][s] = coordsAry[n]; //myArray[i] returned null/undefined, when i got bigger then the declared array.
            n++;

          //  alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));

        }
        // var u = 4;
        s = 0;

        alert(myArray[0][3]);
        alert(myArray[0][4]);

        alert("i=" + i + " s=" + s + " Val: " + (myArray[i][s]));              

    }
于 2012-12-05T14:19:16.600 回答
0

要将元素添加到数组中,您可以使用 push(val)(添加到数组的后面)或 unshift(val) 来添加到数组的前面。所以:

var Exforsys=[];
for (i=0; i <4; i++) {
   Exforsys.push([]);
}
于 2012-12-05T14:20:46.093 回答
0

最近,我一直在使用这种语法来创建一个由固定行和列组成的二维数组。

创建二维数组:

new Array(rows).fill(0).map(_ => new Array(cols))

创建二维数组并使用默认值填充:

new Array(rows).fill(0).map(_ => new Array(cols).fill(0))

细节:

  1. rows通过执行 -创建一个一维数组new Array(rows)
  2. 所以,我们使用 - 填充这个数组的值.fill(0)。这一步是必需的,因为 JavaScript 数组的 map 方法不会遍历空值。
  3. 我们遍历一维数组的所有元素,并使用.map(_ => new Array(cols)).
于 2021-06-11T21:00:28.700 回答