2016-10-31 63 views
1

我是新的nodejs,我非常困惑的異步。Node.js控制流程

我與樣本代碼試圖在一個項存儲到陣列for循環:

var item = {}; 
var array = []; 
for (var j = 1; j < 5; j++) { 
    item.test = j; 
    array.push(item); 
} 

我預期的array的結果是:

[{test: 1}, {test: 2}, {test: 3}, {test: 4}] 

但我得到:

[{test: 4}, {test: 4}, {test: 4}, {test: 4}] 

如果我只是推jarray,沒關係。

var array = []; 
for(var j = 1; j < 5; j++) { 
    array.push(j); 
} 

結果是:

[1, 2, 3, 4] 

我會很感激任何解釋爲什麼會這樣。

+1

因爲你正在修改內部循環中的同一個對象。你想要創建一個'array.push({test:j})'對象'的數組,這樣你就會爲每個鍵有一個新的對象。 –

回答

0

您試圖在循環時修改相同的對象。請在循環語句中創建對象並將其推送到您的數組。

var array = []; 
for(var j =1; j<5; j++){ 
var item = {}; 
item.test = j; 
array.push(item); 
} 

for(var j =0; j<array.length; j++){ 
console.log(array[j]); 
} 
1

在每次迭代中,您都將同一個對象實例item插入到數組中。其中包含item的引用數組,其中包含上次作業中的test: 5

您需要在每次迭代中創建不同的對象來保存不同的屬性:

for(var j =1; j<5; j++){ 
    array.push({test: j}); 
} 
+0

謝謝你的明確解釋。 –

1

您只需通過聲明環路範圍內的項目解決這個問題,所以這是一個新的對象每次。

var array = []; 
for(var j =1; j<5; j++){ 
    var item = {test: j}; 
    array.push(item); 
} 
1

您的項目對象覆蓋上一項。嘗試重新初始化對象

試試這個


 

 
    var item = {}; 
 
    var array = []; 
 
    for(var j =1; j<5; j++){ 
 
    item.test = j; 
 
    array.push(item); 
 
    item={}; 
 
    } 
 
    console.log(JSON.stringify(array))

1

試試這個

var array = []; 
 
for(var j =1; j<5; j++){ 
 
    var item = {}; 
 
    item.test = j; 
 
    array.push(item); 
 
}