2012-12-12 66 views
1

我想創建一個索引號在每個第一個元素的二維數組。for循環和索引數組不工作

(我剛纔的問題把我帶到了這一點>)

這個工程:

$('#create_indexed_array').click(function() { 
    var new_array = [[9,9],[9,9],[9,9],[9,9],[9,9]]; 
    for (var i = 0; i < 5; i++) { 
     new_array[i][0] = i; 
    } 

    alert(JSON.stringify(new_array)); 

}); 

但是這個工作不是:

$('#create_indexed_array').click(function() { 
    var new_array = new Array(new Array()); 
    for (var i = 0; i < 2; i++) { 
     new_array[0][i] = ""; // create cols 
    } 
    for (var i = 1; i < 5; i++) { 
     new_array[i] = new_array[0]; // create rows 
    } 
    for (var i = 0; i < 5; i++) { 
     new_array[i][0] = i; // set index 
    } 
    alert(JSON.stringify(new_array)); 

}); 

編輯: 我最後的工作版本(到目前爲止):

var myArray = []; 
var rows = 5; 
var cols = 2; 

for (var i = 0; i < rows; i++) { 
    myArray [i] = []; 
    for (var j = 0; j < cols; j++) { 
     if (j==0) myArray [i][j] = i; 
     else myArray [i][j] = ''; 
    } 
} 

alert(JSON.stringify(myArray)); 

(R)主要由jfriend;)

仍然不知道爲什麼它是不可能在一開始申報二維數組:myArray的= [[]]

+1

此代碼正在工作....不!用戶名是sasha ...巧合? – jbabey

+0

'var'不需要第二個兩個我。聲明將被提升到函數的頂部。 –

+0

打電話給我男爵,jbabey ---是重複的,但我編輯了第一個(刪除原來的問題),然後它似乎丟失.. duno ---是的,第二個var不需要,但那不是問題嗎? – sasha

回答

1

按照你目前的格局,它的工作是這樣的:

$('#create_indexed_array').click(function() { 
    var myArray = [[]]; 
    for (var i = 0; i < 2; i++) { 
     myArray[0][i] = ""; // create cols 
    } 
    for (i = 1; i < 5; i++) { 
     // create copy of first row in each other row 
     myArray[i] = myArray[0].slice(0); 
    } 
    for (i = 0; i < 5; i++) { 
     myArray[i][0] = i; // set index 
    } 
    alert(JSON.stringify(myArray)); 
});​ 

工作演示:http://jsfiddle.net/jfriend00/vJDPp/你要記住

的一件事是指定數組分配引用數組,而不是一個如果您希望數組的每個元素都不相同,則必須複製第一行的副本以放入後續行中。我還建議更改new_array的名稱,因爲這聽起來像一個函數名稱,它使代碼混淆讀取給不知道它的人。


如果你只是想初始化一個二維數組到所有的9喜歡在你的第一個代碼示例,那麼這將是簡單得多:

$('#create_indexed_array').click(function() { 
    var myArray = []; 
    for (var i = 0; i < 5; i++) { 
     myArray[i] = []; 
     for (var j = 0; j < 2; j++) { 
      myArray[i][j] = 9; 
     } 
    } 
    alert(JSON.stringify(myArray)); 
}); 

或函數的版本:

function create2DArray(lenX, lenY, initVal) { 
    var myArray = []; 
    for (var i = 0; i < lenX; i++) { 
     myArray[i] = []; 
     for (var j = 0; j < lenY; j++) { 
      myArray[i][j] = initVal; 
     } 
    } 
    return(myArray); 
} 
+0

沒錯,引用是問題所在。非常感謝所有人! – sasha

+0

@sasha - 我添加了一個簡單得多的2D數組初始化示例。 – jfriend00

0

爲什麼不你是否在嵌入for循環中使用它?

For(var i = 0; i < 2; i++) { 
    For(var j = 0; j < 5; j++) { 
      new_array[i][j] = i; //set index 
    } 
} 

這樣它一次設置索引。你必須先申報。

之前的問題是,您將它視爲兩個單獨的數組,項目數組以及該數組項目的數組。二維數組是2維的數組。

+0

我認爲你的意思是'for'而不是'For' –

+0

這不會產生與OP的第二個代碼塊相同的結果正在嘗試做。 – jfriend00

+0

我不再習慣於區分大小寫的語言,我想我的不好。 我想我完全錯過了OP想要做的事情? – Loogawa