2014-03-19 132 views
1

谁能告诉我为什么这不起作用?从我可以告诉购买文档和任何例子我能找到的,它应该,但我不断收到以下Javascript 2维数组

var colorArray = []; 
    colorArray[0] = []; 
    colorArray[0][0] = '2F76EE'; 
    colorArray[0][1] = '2F76EE'; 
    colorArray[0][2] = '5fff74'; 
    colorArray[0][3] = '5e6cff'; 
    colorArray[0][4] = 'a6ff1d'; 
    colorArray[1][0] = '2F76EE'; //error is happening here 
    colorArray[1][1] = '2F76EE'; 
    colorArray[1][2] = '5fff74'; 
    colorArray[1][3] = '5e6cff'; 
    colorArray[1][4] = 'a6ff1d'; 

错误的错误,当我运行它

Uncaught TypeError: Cannot set property '0' of undefined 

谢谢!

+0

参见http:// stackoverflow 。com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript – Phrogz

+0

JavaScript没有二维数组。它有阵列,你可以嵌套它们。但仅仅因为你在主阵列的第一个插槽中放置了一个子阵列并不意味着你会在第二个插槽中自动获得一个。 – Phrogz

回答

4

当你说colorArray[1][0],JavaScript访问colorArray[1],因为它尚未定义,它评估为undefined。所以,你正在试图做undefined[0]。这就是它失败的原因。

为了解决这个问题,

  1. 你有做任何更改该元素

    colorArray[1][0] = '2F76EE'; 
    colorArray[1][1] = '2F76EE'; 
    ... 
    
  2. 既然你在做静态前初始化元件1这样

    colorArray[1] = []; 
    

    初始化,你甚至可以做

    var colorArray = []; 
    colorArray.push([ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]); 
    colorArray.push([ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]); 
    
  3. 否则,您可以初始化直线距离,这样

    var colorArray = [[ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ], 
            [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]]; 
    
  4. 你也可以做这样的事情

    var element1 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]; 
    var element2 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]; 
    var colorArray = []; 
    colorArray.push(element1, element2); 
    

    注:你可能会奇怪,为什么我不能简单地做

    colorArray.push(element1, element1); 
    

    因为两个阵列都是一样的。它当然会起作用。但它有一个问题。 如果您改变其中一个阵列,它也会影响其他。例如,

    var element1 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]; 
    var colorArray = []; 
    colorArray.push(element1, element1); 
    colorArray[0].push("abcdef"); 
    console.log(colorArray); 
    // [ [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d', 'abcdef' ], 
    // [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d', 'abcdef' ] ] 
    

    您可能没有料到这一点。但在JavaScript中,所有变量名称都只是对象的引用。所以,当你做colorArray.push(element1, element1);时,你添加了两次相同的引用。所以,这两个元素都指向同一个对象。所以,变异会影响另一个。

+0

很好的回答!谢谢! – Jason

1

你需要有

colorArray[1] = [];

0

远远超过你所拥有的简单,而且还避免你的问题:

var colorArray = 
    [['2F76EE','2F76EE','5fff74','5e6cff','a6ff1d'], 
    ['2F76EE','2F76EE','5fff74','5e6cff','a6ff1d']]; 

(见为什么你写其他答案被破坏)。