对象不维护赋值

Object Not Maintaining Assigned Values

我正在遍历一个数组以创建另一个格式已修改的对象数组。

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。但是属性名称与对象中的值不匹配。

请帮忙。谢谢

问题是您每次通过 for (var k) 循环都使用相同的 res_room 对象。所以 res_room[i] 中的所有属性都指的是同一个对象,您就地修改了该对象。分配对象时需要复制对象。

room_reservations[i][res_room.room_name] = JSON.parse(JSON.stringify(res_room));