2017-10-29 60 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.

我试图运行的节点上脚本,它正确地打印出阵列上的每个迭代中,只有一个在第一次迭代项,因此您的代码是好的。