2017-10-29 86 views
0

我有以下代碼。For循環多次使用Javascript追加對象

const timeLabels = [ 
 
    { name: "1:00 AM", present: true, label: ["1:00", "2:00"], value: "1:00" }, 
 
    { name: "2:00 AM", present: true, label: ["2:00", "3:00"], value: "2:00"}, 
 
    { name: "3:00 AM", present: true, label: ["3:00", "4:00"], value: "3:00" }, 
 
]; 
 

 
const targetedTimes = [["0:00", "1:00"], ["1:00", "2:00"]] 
 
    
 
    let actualTime = []; 
 

 
    console.log("getting time"); 
 
    console.log("start: the actualTime is", actualTime); 
 
    for (var j = 0; j < timeLabels.length; j++) { 
 
     console.log("x"); 
 
     var currItem = timeLabels[j]; 
 
     var label = JSON.stringify(currItem.label); 
 
     var adTime = JSON.stringify(targetedTimes); 
 
     if (adTime.indexOf(label) >= 0) { 
 
      currItem.present = true; 
 
     } else { 
 
      currItem.present = false; 
 
     } 
 
     console.log("the current item is", currItem); 
 
     actualTime.push(currItem); 
 
     console.log("The actual time is", actualTime); 
 
    }

在第一次迭代中,currItem是

{name: "1:00 AM", present: true, label: Array(2), value: "1:00"} 

但actualTime是

[{name: "1:00 AM", present: true, label: Array(2), value: "1:00"}, 
    {name: "2:00 AM", present: false, label: Array(2), value: "2:00"}, 
    {name: "3:00 AM", present: false, label: Array(2), value: "3:00"}] 

爲什麼會actualTime名單有三個值時,我只在第一次迭代中追加1?

+0

等一下,for循環前的'console.log'怎麼樣?它記錄了什麼? – Zeke

+0

這裏沒有什麼是錯的;這一切都非常有意義。 – HyperNeutrino

+0

@HyperNeutrino你可以詳細說明爲什麼當我console.log currItem它顯示1項,但當我真的推它到列表,它追加3項在第一次迭代? – lost9123193

回答

1

發生了什麼事情是控制檯正在打印對象的引用(因爲數組是javascript中的一種對象),所以在打印它並在控制檯中讀取它時,每個console.log語句是指向相同的最終數組,這就是每次值相同的原因。

Have a look at this similar StackOverflow question for more insight.

我試圖運行的節點上腳本,它正確地打印出陣列上的每個迭代中,只有一個在第一次迭代項,因此您的代碼是好的。