2016-08-22 1 views
1

배열을 반복하면서 수정 된 형식의 다른 객체 배열을 만듭니다.할당 된 값을 유지하지 않는 객체

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를 기록하고 정확한 값을 얻습니다. 그러나 전체 개체를 기록 할 때 속성 값이 올바르지 않습니다. 마치 다음 루프에서 값을 가져 오는 것과 같습니다.

enter image description here

나는이 문제를 어떻게 해결합니까? 단지 로깅이 아닙니다. room_reservations 배열에 설정된 값이 잘못되었습니다. 예를 들어, 속성 이름을 res_room.room_name으로 설정하고 값을 res_room으로 설정합니다. 그러나 속성 이름이 객체의 값과 일치하지 않습니다.

enter image description here

이 도와주세요. Thx

+0

'res_room'은 전역 변수 (줄'7') 인 것처럼 보입니다. 당신이 그것을 반복 할 때마다'var'을 사용하여 로컬로 만들 수 있습니까? – TheHansinator

+0

그게 좋은 생각인데 동의하지만이 문제를 일으킬 수있는 방법을 모르겠습니다. 그는 변수를 수정할 수있는 외부 함수를 호출하지 않습니다. – Barmar

+0

당신은 내부의 'for' 루프를 통해 매번 동일한'res_room' 객체를 사용하고 있습니다. – Pointy

답변

1

문제는 동일한 res_room 개체를 매번 for (var k) 루프를 통해 사용하고 있다는 것입니다. 따라서 res_room[i]의 모든 속성은 동일한 개체를 참조하며,이 개체는 사용자가 수정합니다. 오브젝트를 지정할 때 오브젝트의 사본을 작성해야합니다.

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

코드를 수정하여 지역 변수와 세 번째 루프 내부에 할당을 넣어. 이제 작동합니다. 감사!!!! – Bryan

관련 문제