为什么这个javascript代码不起作用?

时间:2010-12-26 23:07:19

标签: javascript arrays multidimensional-array

var arrayi = new Array();
for (var i=0; i<=9; i++)
{
    for (var o=0; o<=9; o++)
    {
        arrayi[i][o]=i + "" + o;
    }
}
for (var i = 0, j = 9; i <= 9; i++, j--)  
  document.write("arrayi[" + i + "][" + j + "]= " + arrayi[i][j]);

我正在尝试将00分配给arrayi [0] [0],62分配给arrayi [6] [2]等。然后显示[0] [9],[1] [8] ......

8 个答案:

答案 0 :(得分:7)

JavaScript中的数组是一维的。

因此arrayi[0]undefined,然后arrayi[0][0]变为undefined[0],显然无效。

您需要通过将数组分配给arrayi的索引来创建二维数组,并且还会分配实际值的错误:

var arrayi = []; // [] is the favored shorthand of new Array()
for (var i=0; i<=9; i++) { // always place { on the same line, 
                           // automatic semi colon insertion can screw you up in JavaScript

    arrayi[i] = []; // assign a new empty array
    for (var o=0; o<=9; o++) {
        arrayi[i][o]= i + '' + o; // i and o are both numbers so you will assign their sum
                                  // need to convert them to strings in order to concatenate them
    }
}

关于自动分号插入搞砸了,请看一下:

return  // js will insert a semi colon here, so this will return undefined
{ // no syntax errors, gets parsed as a block, even though there is block scope in JS
    foo: 2 // parsed as a label... single expression evaluation then makes the 2 work
} // another semi colon gets inserted here

所以JS正在修复你的代码......错误的方法:)

更新

我有点不清楚你想要做什么,如果你想将一个数字分成小数位然后分配,那么你首先要确保你的数组足够大然后你必须分开数字:

var i = 62;
var s = (i).toString(); // convert the number 62 to a string
s = i < 10 ? '0' + i : s; // make sure that "9" will become "09"
var p = s.split(''); // ["6", "2"];
arrayi[+p[0]][+p[1]] = i; // assign the value, + will convert the strings to a number without the horrible parseInt

答案 1 :(得分:2)

你的第六行有i + o,其中i和o是Numbers,它们将作为数字添加。 0 + 0 = 06 + 2 = 8。要连接字符串,您需要将数字转换为字符串。最简单的方法是添加一个空字符串; arrayi[i][o] = i + "" + o

答案 2 :(得分:2)

改变这一点,

arrayi[i][o]=i + o;

用;

arrayi[i][o]= i + "" + o;

答案 3 :(得分:2)

我猜你的目标是这样:

var arrayi = new Array(10);
for (var i=0; i<=9; i++)
{
    arrayi[i] = new Array(10);

    for (var o=0; o<=9; o++)
    {
        arrayi[i][o]=i + o;
    }
}

for (var i = 0; i <= 9; i++)  
    for (var j = 0; j <= 9; j++)
      document.write("arrayi[" + i + "][" + j + "]= " + arrayi[i][j] + "<br>");

答案 4 :(得分:1)

运行该代码时,会收到错误ReferenceError: arrayi is not defined

你需要在为其分配另一个项目之前设置arrayi [i],就像它是一个数组一样。我建议尽可能使用push来设置数组元素。

这段代码怎么样:

var arrayi=[];for (var i=0; i<=9; i++)
  {
  arrayi.push([]);
  for (var o=0; o<=9; o++)
    { 
    arrayi[i].push([i +''+ o]);
    }
  }
  for (var i = 0, j = 9; i <= 9; i++, j--){
    console.log("arrayi[" + i + "][" + j + "]= " + arrayi[i][j]);
    }

输出:

arrayi[0][9]= 09
arrayi[1][8]= 18
arrayi[2][7]= 27
arrayi[3][6]= 36
arrayi[4][5]= 45
arrayi[5][4]= 54
arrayi[6][3]= 63
arrayi[7][2]= 72
arrayi[8][1]= 81
arrayi[9][0]= 90

这就是你想要的,对吧?

一个额外的小费;我建议使用var array=[]而不是JavaScript中的new Array()

答案 5 :(得分:1)

尝试

arrayi[i][o]=i * 10 + o;

arrayi[i][o]=String(i) + String(o);

答案 6 :(得分:1)

要以数字方式分配,您需要:

arrayi[i][o] = (i*10)+o;

答案 7 :(得分:0)

document.write("arrayi[" + i + "][" + j + "]= " + a[i][j]);

你叫一个而不是arrayi