0

我在 IE8 中使用 ado 从本地数据库中读取一些值并生成一个二维数组。我希望这个数组的第一个索引是字段,第二个索引是行。因此,即使只有一个字段或一行,我也想要一个二维数组。以下代码充分描述了我用来创建数组的过程:

function test() {
  var a = new Array(1);
  alert(a.length); // 1
  for (var i=0; i<10; i++)
    a[0,i] = i;
  alert(a.length); // 10
}

在循环之前,数组长度为 1。之后为 10。这意味着当我想要一个 1xn 数组时,我得到一个长度为 n 的向量。

我什至无法访问其他浏览器来查看这是否发生在其他地方。我的工具非常受限,但那是另一回事了。

提前感谢您的帮助。

马特

4

2 回答 2

3

你需要这个:

function test() {
    var a = [[]]; // create an array within an array using shorthand notation, don't use new Array().

    // a clearer way to explain the above is this:
    // var a = []; // create an empty array with shorthand notation
    // a[0] = []; // create an empty array as the first element of a

    alert(a.length); // 1

    for (var i = 0; i < 10; i++) {
        a[0][i] = i;
    }

    alert(a.length); // 1
}​

因为 Javascript 没有真正的多维数组,所以您必须使用a[0][i],而不是访问第二个数组a[0, i]。这是因为您实际上是在创建一个数组数组。

于 2012-05-30T00:59:56.407 回答
1

Javascript 不知道多维数组。因此,您需要:

var a = new Array(1);
alert(a.length); // 1
for (var i=0; i<a.length; i++) { // useless :-)
    a[i] = new Array;
    for (var j = 0; j < 10; j++)
        a[0][j] = j;
}
alert(a.length); // 1

使用数组速记表示法可能更容易理解代码:

var a = [new Array(10)];
for (var i=0; i<a[0].length; i++)
    a[0][i] = i;
alert(a.length); // 1

您的方法 witha[0,i]被解释为计算结果为 的表达式序列i,因此相当于a[i].

于 2012-05-30T01:03:33.603 回答