2016-08-29 7 views
1

mRegion 객체는 마지막 객체를 여러 번 추가하지만 objBeacon은 다른 객체를 인쇄합니다. mRegion의 문제점은 무엇입니까?런타임시 javascript 배열에 객체 추가

 var mRegion = new Array(); 

     var objBeacon = { 
      id: '10', 
name:'name', 
      description: 'description' 
     }; 
     $.ajax(settings).done(function(response) { 
        // populate beacon registry in an array 
        for (var i in response.items[0].devices) { 
         objBeacon.id = response.items[0].devices[i].id; 
         objBeacon.name = response.items[0].devices[i].name; 
         objBeacon.description = response.items[0].devices[i].description; 


         console.log("value of i is" + i); 
         console.log(objBeacon); 

         mRegion.push(objBeacon); 
        } 
        console.log(mRegion); 
+1

무엇이 오류입니까? – Aravind

+0

오류가 없습니다. 그러나 동일한 객체가 배열 – RDX

답변

2

객체는 참조에 의해 전달된다 (심지어 아주의 beautifull하지 않습니다). 하나의 변수는 objBeacon이고 각 배열 요소는이 변수를 가리 킵니다. objBeacon을 변경할 때마다 모든 참조가 변경됩니다.

var mRegion = []; 

$.ajax(settings).done(function(response) { 
    // populate beacon registry in an array 
    for (var i in response.items[0].devices) { 
    mRegion.push({ 
     id: response.items[0].devices[i].id, 
     uid: '00', 
     major: 1, 
     minor: 1, 
     name: response.items[0].devices[i].name, 
     description: response.items[0].devices[i].description 
    }); 
    } 
}); 
+0

에 추가되고 있습니다. var mRegion = new Array(); var 대신 mRegion = []; – RDX

+1

아니요. 그러나 배열 생성자에는 입력 매개 변수를 처리하는 방법이 일부 달라집니다. 그래서 새로운 배열을 만들 때 항상 배열 리터럴'[]'을 사용하는 것이 좋습니다. –

0

개체를 하나만 만들고 objBeacon에 개체 참조 만 할당하면됩니다.

루프를 돌릴 때마다 보유한 단일 개체를 수정하고 배열에 추가 참조를 푸시합니다.

다른 개체의 배열을 원하면 루프를 돌릴 때마다 새 개체를 만들어야합니다.

0

"복제본"대신 "참조"를 사용하는 개체를 사용하고 있습니다. 그 코드가 작동해야

는 자바 스크립트

var mRegion = new Array(); 


$.ajax(settings).done(function(response) { 
    // populate beacon registry in an array 
    for (var i in response.items[0].devices) { 
     var objBeacon = { 
      id: '10', 
      uid: '00', 
      major: 1, 
      minor: 1, 
      name: 'name', 
      description: 'description' 
     }; 

     objBeacon.id = response.items[0].devices[i].id; 
     objBeacon.name = response.items[0].devices[i].name; 
     objBeacon.description = response.items[0].devices[i].description; 


     console.log("value of i is" + i); 
     console.log(objBeacon); 

     mRegion.push(objBeacon); 
    } 
    console.log(mRegion); 
});