2014-02-18 107 views
1

我的代碼有問題嗎?我期待我的代碼:Javascript和for循環問題

years=new Array(); 
for (i = 0; i < 5; ++i) { 
    for (j = 1; j < 13; ++j) { 
     player.push(Math.round(nestedData[i].value[j])) 
    } 

    years.push(player) 
} 

console.log(years) 

打印類似:

[array[12],array[12],array[12],array[12]] 

,但我得到的結果是:

[array[60],array[60],array[60],array[60]] 

回答

4

創建第一個for循環中一個新的播放器陣列。你的代碼的問題是值被推入同一個數組實例。

var years = []; 
for (i = 0; i < 5; ++i) { 
    var player = []; 
    for (j = 1; j < 13; ++j) { 
     player.push(Math.round(nestedData[i].value[j])) 
    } 
    years.push(player) 
} 

console.log(years) 
+0

個人而言,我很困惑,爲什麼OP期待四個12的數組......這是你可能期望的那種東西得到12,24,36,48,60,因爲你期望'years.push()'獲得數組的副本(當然,它不)。無論如何,+1 –

+0

@NiettheDarkAbsol。沒錯,除非OP認爲嵌套循環會創建一個新的數組實例。 –

1

作爲除了正確的答案很清楚,請用var來聲明變量:

for (var i=0; i < 5; ++i) { 
    var player = []; 
    for (var j = 1; j < 13; ++j) { 
     ... 

否則,它會使用i作爲一個全局變量,如果你有兩個可能很差結束函數在同一時間循環,例如:

function loopone() { 
    //wouldn't expect this to be an infinite loop eh? 
    for (i=0; i < 100; i++) { 
     looptwo(); 
    } 
} 
function looptwo() { 
    for (i=0; i < 10; i++) { 
    } 
}