2015-01-09 77 views
-1

我想用以下javascript程序使用for循環填充數組。使用for循環的Javascript填充數組

var x = []; 
var y = []; 
for(i = 0; i < 10; i++){ 
    y[0] = (i); 
    y[1] = (i + 1); 
    x[i] = y; 
    console.log('x[' + i + '] = ' + x[i]); 
} 
console.log(''); 
console.log('x[] ='); 
console.log(x); 

輸出是。

x[0] = 0,1 
x[1] = 1,2 
x[2] = 2,3 
x[3] = 3,4 
x[4] = 4,5 
x[5] = 5,6 
x[6] = 6,7 
x[7] = 7,8 
x[8] = 8,9 
x[9] = 9,10 

x[] = 
[ [ 9, 10 ], 
    [ 9, 10 ], 
    [ 9, 10 ], 
    [ 9, 10 ], 
    [ 9, 10 ], 
    [ 9, 10 ], 
    [ 9, 10 ], 
    [ 9, 10 ], 
    [ 9, 10 ], 
    [ 9, 10 ] ] 

的問題是,在for循環在y內[0]和Y [1]的數組元素基於當前索引(i)獲得的值,而x [I]的數組元素中填充有當前y []如第一個打印輸出中所示。這就是我期待的以及我想如何填充X []。

for循環的所有x的外面已根據9的最後索引(i)的值的值,如在第二打印輸出[I]的元素。我究竟做錯了什麼?

+0

您還沒有引用'按值y'。 – epascarello

+0

'y'永遠是相同的參考 – njzk2

+0

從NewBe謝謝所有優秀的答案。將深入探討引用和傳遞值。 –

回答

0

這是一個人爲的例子嗎?因爲您在每次迭代中分配y這是參考類型爲x,並且在每個步驟中修改了y(但是所有x[]s都指向相同的y),您將得到相同的數字。相反,即使使用y(假設它不是人爲的),你應該比較:

var x = [], i; 
for(i = 0; i < 10; i++){ 
    x[i] = [i, i + 1]; 
    console.log('x[' + i + '] = ' + x[i]); 
} 
console.log(''); 
console.log('x[] ='); 
console.log(x); 

它建立每個迭代x一個新的數組(這是我認爲你正期待你的代碼做)

0

由於我在評論中提到,您正在將數組的索引設置爲數組。它不存儲該數組的值。

你要麼需要在不斷的迭代創建一個新的數組,或者你需要克隆它。

新數組:

var x = []; 
 
for (var i = 0; i < 10; i++) { 
 
    var y = []; 
 
    y[0] = (i); 
 
    y[1] = (i + 1); 
 
    x[i] = y; 
 
    console.log('x[' + i + '] = ' + x[i]); 
 
} 
 
    console.log(''); 
 
    console.log('x[] ='); 
 
    console.log(x);

克隆:

var x = []; 
 
var y = []; 
 
for (var i = 0; i < 10; i++) { 
 
    y[0] = (i); 
 
    y[1] = (i + 1); 
 
    x[i] = y.slice(); 
 
    console.log('x[' + i + '] = ' + x[i]); 
 
} 
 
console.log(''); 
 
console.log('x[] ='); 
 
console.log(x);

0

還有一個辦法做到這一點,如果你需要保持Y:

for(i = 0; i < 10; i++){ 
    y[0] = (i); 
    y[1] = (i + 1); 
    x[i] = [y[0], y[1]]; 
}