Javascript:从1xn 2d数组自动转换为长度为n的向量

时间:2012-05-30 00:57:10

标签: javascript arrays type-conversion

我正在使用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的向量。

我甚至无法访问其他浏览器以查看是否在其他地方发生这种情况。我的工具非常受限制,但这是另一个故事。

提前感谢您的帮助。

马特

2 个答案:

答案 0 :(得分: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]。这是因为你真的在创建一个数组数组。

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

您使用a[0,i]的方法被解释为expression sequence,其评估结果为i,因此等同于a[i]