For循环多次使用Javascript追加对象
问题描述:
我有以下代码。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?
答
发生了什么事情是控制台正在打印对象的引用(因为数组是javascript中的一种对象),所以在打印它并在控制台中读取它时,每个console.log语句是指向相同的最终数组,这就是每次值相同的原因。
Have a look at this similar StackOverflow question for more insight.
我试图运行的节点上脚本,它正确地打印出阵列上的每个迭代中,只有一个在第一次迭代项,因此您的代码是好的。
等一下,for循环前的'console.log'怎么样?它记录了什么? – Zeke
这里没有什么是错的;这一切都非常有意义。 – HyperNeutrino
@HyperNeutrino你可以详细说明为什么当我console.log currItem它显示1项,但当我真的推它到列表,它追加3项在第一次迭代? – lost9123193