2016-06-30 1 views
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); 
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). Он должен проверить, совпадают ли они (оба ключа объекта и идентификатор состояния) – 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);