2016-06-30 1 views
0

객체의 ID를 기반으로 클래스 배열을 잡으려고합니다. (및 저장)다차원 객체에서 배열 가져 오기

const objs = { 
    "1":{ 
      "name":"Candice", 
      "classes": [00029,00023,00032,000222], 
      "id":0002918 
    }, 
    "2":{ 
      "name":"Clark", 
      "classes":[000219,00029,00219], 
      "id":00032 
     } 
} 

const objsKeys = Object.keys(objs); 
const userClasses = objKeys.find(a => objs[a].id === this.state.userId).classes 
console.log(userClasses); 

// expect output 
[00029,00023,00032,000222] 

// but returns 
Uncaught TypeError: Cannot read property 'classes' of undefined 

여기서 내가 뭘 잘못하고 있니? 사전에 도와 주셔서 감사합니다!

+0

'this.state.userId'의 값은 무엇입니까? – Timo

+0

@TimoSta 1 또는 2 객체 키 (id 값 아님). 일치하는지 확인해야합니다 (객체 키와 상태 ID 모두) – Modelesq

+0

아마 정수입니까? '==='는 값과 타입을 비교하므로'1 === '1''은'false'와 같습니다. – Timo

답변

1

당신은 Array#find 방법을 사용하여 속성 이름을 받고, 당신은 문자열의 classes 속성을 얻으려고 노력하고 undefined 인된다. 따라서 Array#find 메서드에 의해 반환 된 속성 이름을 사용하여 객체에서 속성 값을 가져와야합니다.

const userClasses = objs[objKeys.find(a => objs[a].id === this.state.userId)].classes 
0

키를 받고있는 중입니다. 시도 :

const objs = { 
    "1":{ 
      "name":"Candice", 
      "classes": [00029,00023,00032,000222], 
      "id":0002918 
    }, 
    "2":{ 
      "name":"Clark", 
      "classes":[000219,00029,00219], 
      "id":00032 
     } 
} 

const objsKeys = Object.keys(objs); 

//if you console.log the following, you get the property/key of 2: 
console.log(objsKeys.find(a => objs[a].id === 00032)) 

// you need to use that property to get the object value 
const userClasses = objs[objsKeys.find(a => objs[a].id === this.state.userId)].classes 
console.log(userClasses);