【问题标题】:Object Not Maintaining Assigned Values对象不维护分配的值
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 我修改了代码以使用局部变量并将赋值放在第三个循环中。现在可以了。谢谢!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
  • 2011-02-04
  • 2020-08-18
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多