2017-11-10 4 views
1

에서 하위 키 내부에 키 값을 할당 :내가 개체가 개체

{ field1: 'ton', field2: {brotherage: 30 } } 

및 코드의 이러한 유형의 필드에 더 많은 요소를 추가 :

field='field2' 
relative='cousinage' 
names[field][relative] = 20; // has no effect in my code, why ? 

0 내용 : ... 최고의 Methos는 무엇

{ field1: 'ton', field2: {brotherage: 30, cousingage: 30 } } 

또는 내가 실패 해요 이유는 ... 나는 많은 것들을 시도했다하지만 난 길을 잃지

답변

1

당신은 기본 개체를 사용할 수 있습니다. names[ "field2" ]null하고

var names = { field1: 'ton', field2: null }, 
 
    field = 'field2', 
 
    field1 = 'field3', 
 
    relative = 'brotherage'; 
 
    relative1 = 'inlaw'; 
 
    
 
names[field] = names[field] || {}; 
 
names[field][relative] = 30; 
 

 
names[field1] = names[field1] || {}; 
 
names[field1][relative1] = 40; 
 

 
console.log(names);

+0

요소가 너무 null 또는 정의를 해제 할 수 있습니까? case3 필드가 존재하지 않습니까? 존재하지 않는 회원에게 동일한 논리를 사용할 수 있습니까? – DDave

+0

그렇습니다. 초기화되지 않은 속성의 값이 거짓 값인 '정의되지 않은'값이기 때문에 패턴은 존재하지 않는 속성에도 적용됩니다. –

1

빈 개체로 field2 필드를 초기화 : 재산이 falsy 가치가 있거나 존재하지 않는 경우

let names = { field1: 'ton', field2: {} } 
1

// has no effect in my code, why ?

때문에 코드는 당신이 먼저 개체 수 있도록 할 필요가

Uncaught TypeError: Cannot set property 'brotherage' of null

로 밖으로 error'ng됩니다

names[field] = names[field] || {}; 
names[field][relative] = 30; 
+0

필드에 이미 값이 있고 상대도 가질 수 있습니다. 직접 초기화하기 전에 값을 확인하거나 테스트해야합니다. nina가 올바른 대답이라고 생각하십시오. – DDave

+0

@DDave 맞습니다. 직접 할당하기 전에 확인해야합니다. 나는 지금 그것을 바로 잡았지만 다른 전문가들이 먼저 그것을 외쳤다 고 생각한다. – gurvinder372

2

먼저 빈 개체로 names[field]를 초기화해야한다 : 객체 내부

let names = { field1: 'ton', field2: {} } 
 

 
field='field2' 
 
relative='brotherage' 
 
names[field][relative] = 30 
 

 
field='field2' 
 
relative='cousinage' 
 
names[field][relative] = 20 
 

 
console.log(names)