javascript多维动态数组

时间:2012-12-05 14:13:01

标签: javascript

我可以使用一些指导来在javascript中指定动态多维数组。据我所知,javascript本身并不是定义多个dim数组,而是一个数组的数组,即

 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”,...等等,这已被证实。填充第二条记录后,我收到此错误....

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

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

谢谢,

4 个答案:

答案 0 :(得分:16)

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

你可以在任何索引上设置一个你想要的变量

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

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

这对我有用

答案 1 :(得分: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]));              

    }

答案 2 :(得分:0)

要向数组添加元素,可以使用push(val)(添加数组的背面)或unshift(val)添加到数组的前面。所以:

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

答案 3 :(得分: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)) 使其成为二维数组。