2016-07-10 4 views
3

을 제외 JSON 객체를 생성 I 루프 내에서 속성 중 일부는 아마도 정의되지 않은 자바 스크립트 객체 생성, 다음 코드 코드가 있습니다정의되지 않은 속성

reader.on('record', function(record) { 

    let p = record.children; 
    let player = {}; 

    // below we create a dynamic key using an object literal obj['name'], this allows use to use 
    // the id as the firebase reference id. 
    player[p[0].text] = { 
     id: parseInt(p[0].text, 10) || "", 
     name: p[1].text || "", 
     country: p[2].text || "" 
    }; 
}; 

내 질문을 따라서를; 예를 들어 '지도'를 통해이 개체를 만드는 더 좋은 방법이 있습니까? 속성이 정의되지 않은 경우 개체에 추가하지 마십시오.

참고 :이 데이터는 Firebase DB로 전송되므로 정의되지 않은 값은 오류를 발생시킵니다. 여기

은 (통지 나라가 두 번째 플레이어에서 누락되지 않음) 내가보고 싶은 JSON의 샘플입니다

player = JSON.parse(JSON.stringify(player)); 

이 :

{ 
"players" : { 
    "100001" : { 
     "id" : 100001, 
     "name" : "Matt Webb", 
     "country" : "ENG" 
    }, 
    "100002" : { 
     "id" : 100002, 
     "name" : "Joe Bloggs", 
    } 
} 
+0

당신은 속성이 먼저 정의되어 있는지 확인하고 만 추가 할 수있는 에러주지 않는다 정의 된 경우. –

+0

@PatrickEvans 그건 중복되지 않습니다. 그 질문은 속성이 추가되어야하는지 아닌지를 결정하기 위해 'true'또는 'false' 인 별도의 매개 변수를 기반으로 묻습니다. 이 질문은 정의되는 매개 변수 자체의 값을 기반으로합니다. –

+0

입력 (s) ('record')이 어떻게 보이는지 보지 않으면이 질문에 답할 수 없습니다. 또한'player' 객체로 무엇을 할 것입니까? – Bergi

답변

3

null 값이 중포 기지에는 설정되어 있지 않습니다 ... 정의되지 않은 값으로 키를 직렬화하지 않습니다 당신이

player[p[0].text] = { 
    id: parseInt(p[0].text, 10) || null, 
    name: p[1].text || null, 
    country: p[2].text || null 
}; 
2

당신이 뭔가를 할 수 있습니다 그렇다면 ...

player[p[0].text] = { 
    id: parseInt(p[0].text, 10), 
    name: p[1].text, 
    country: p[2].text 
}; 

... 걱정하지 마세요. JSON.stringif Y는