2016-06-24 3 views
1

나는 다양한 객체에 데이터를로드하기 위해 객체에서 객체를 만들고 있습니다. 이 방법은 원하는대로 작동하지만 중복되는 것처럼 느껴집니다. 이것이 더 간결하고 나은 방법으로 성취 될 수 있습니까? 예컨대 사용 제외간결한 방법으로 객체 선언 및로드

var user = {   
    productLine: { 
     userActiveValue: [] 
    }, 
    id: { 
     PACT: null, 
     EDIPI: null, 
     AKO: null, 
    }, 
    name: { 
     first: null, 
     last: null, 
    }, 
    DMIS: null, 
    region: null, 
    email: null, 
    load: true, 
    loadUser: function (userInfoAPIResponse) { 
     this.id.PACT = userInfoAPIResponse.UID; 
     this.id.EDIPI = userInfoAPIResponse.EDIPN; 
     this.id.AKO = userInfoAPIResponse.akoUserID; 
     this.name.first = userInfoAPIResponse.fName; 
     this.name.last = userInfoAPIResponse.lName; 
     this.DMIS = userInfoAPIResponse.dmisID; 
     this.region = userInfoAPIResponse.RHCName; 
     this.email = userInfoAPIResponse.userEmail; 
     console.log(this); 
    } 
}; 
+0

개체의 속성 이름과 'userInfoAPIResponse'에 의해 반환 된 값의 속성 이름간에 일관성을 유지한다면 루프 만 실행하면됩니다. 또한,'loadUser'는 프로토 타입의 확장으로서'user' 객체 밖에 있어야합니다. – Baruch

+0

API에서 반환 한 개체는 다른 부서에서 가져온 것입니다. 해당 API에서 제공되는 명명 규칙은 우리가 사용하고자하는 것과는 다르기 때문에 최종적으로 변경할 수있는 옵션이 없습니다. 나는 그것이 같을 수 있었으면 좋겠다. –

+0

Qwertiy의 솔루션이 마음에 들지만 객체 리터럴을 고수하고 작업이 완료되기 전에'loadUser'가 호출되도록하려면 위의 속성 정의를 제거하면됩니다 ('productLine'과'load' 제외). 당신은 당신의'loadUser' 함수에 그것들을 할당하지 않습니다). 나머지는 데이터를로드 할 때 작성되며 처음에 정의 할 필요는 없습니다. –

답변

5
function User(userInfoAPIResponse) { 
    this.id = { 
    PACT: userInfoAPIResponse.UID, 
    EDIPI: userInfoAPIResponse.EDIPN, 
    AKO: userInfoAPIResponse.akoUserID 
    }; 
    this.productLine = { 
    userActiveValue: [] 
    }; 
    this.name = { 
    first: userInfoAPIResponse.fName, 
    last: userInfoAPIResponse.lName 
    }; 
    this.DMIS = userInfoAPIResponse.dmisID; 
    this.region = userInfoAPIResponse.RHCName; 
    this.email = userInfoAPIResponse.userEmail; 
} 
var user = new User(...); 
+0

좋은 생각. 이 경우 들어오는 객체에 속성이 존재하지 않으면 정의되지 않은 값이 생깁니 까? –

+0

@IthinkIcancode, 예. 하지만 당신도 같은 방식으로 행동을 하죠, 그렇죠? – Qwertiy

0

user.name = {첫 번째 : response.fName, last : response.lName} 등등. 하나의 객체에서 다른 객체로 직접 변수를 매핑하거나 사용자 변수로 응답을 사용해야합니다. 또는 사용자를 전역 (또는 외부) 범위로 선언 할 수 있으며 콜백 함수에서 하위 개체를 선언하고 설정할 수 있습니다. 이것은 단순히 null이 아닌 간단한 검사와는 달리 다른 곳에서 사용하기 전에 잠재적으로 부모와 부모가 정의되지 않았는지 확인해야한다는 것을 의미합니다.

+0

Quertiy가 좀 더 완전한 대답으로 나를 이길 것 같습니다. – Alpvax