【发布时间】:2016-12-29 15:17:32
【问题描述】:
我正在循环一个数组以创建另一个修改格式的对象数组。
for (i = 1; i <= 37; i++) { // create 37 boxes for days of the month and nearby dates
room_reservations[i] = {};
var this_date = getDate();
var res_count = 0;
for (var res_index = 0; res_index < reservations.length; res_index++) {
var this_res = reservations[res_index];
// bad assignment location
// res_room = JSON.parse(JSON.stringify(this_res));
if (this_res.checkin <= this_date && this_res.checkout > this_date) {
for (var k = 0; k < this_res.rooms.length; k++) {
var res_room = {};
res_room = JSON.parse(JSON.stringify(this_res));
var this_room = res_room.rooms[k];
res_room.room_index = k;
var traveler_count = this_room.travelers.length;
console.log('traveler_count: ', traveler_count);
res_room.traveler_count = traveler_count;
//traveler_counts[i][res_room.room_name] = traveler_count;
console.log('res_room.traveler_count: ', res_room.traveler_count);
var room_name = this_room.room_name;
console.log('room_name: ', room_name);
res_room.room_name = room_name;
console.log('res_room: ', res_room);
room_reservations[i][res_room.room_name] = res_room;
}
}
}
}
基本上,我通过控制台记录对象属性 traveler_count 并获得正确的值。但是在记录整个对象时,属性值不正确。就像它从下一个循环中获取值一样。
我该如何解决这个问题?这不仅仅是日志记录。 room_reservations 数组中设置的值是错误的。例如,我将属性名称设置为 res_room.room_name,将值设置为 res_room。但属性名称与对象中的值不匹配。
请帮忙。谢谢
【问题讨论】:
-
看来
res_room是一个全局变量(7行)。您可以尝试使用var将其设为本地吗,因为您每次迭代都会更改它? -
虽然我同意这是个好主意,但我不明白它是如何导致这个问题的。他没有调用任何可能修改变量的外部函数。
-
您每次通过内部
for循环都使用相同的res_room对象。 -
我建议阅读这个SO post
-
javascript 变量提升(google it)
标签: javascript loops object properties variable-assignment