2016-06-30 8 views
0

Ich versuche, die Klassen-Array basierend auf einer ID aus dem Objekt zu greifen. (und speichern Sie es)Get Array von einem mehrdimensionalen Objekt

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 

Was mache ich hier falsch? Danke im Voraus für Ihre Hilfe!

+0

Was ist der Wert von this.state.userId? – Timo

+0

@TimoSta 1 oder 2. der Objektschlüssel (kein ID-Wert) Es sollte überprüfen, ob sie übereinstimmen (sowohl Objektschlüssel als auch Status-ID) – Modelesq

+0

Wahrscheinlich eine ganze Zahl? '===' vergleicht Wert und Typ, also ist '1 === '1'' gleich' falsch'. – Timo

Antwort

1

Sie erhalten den Namen der Eigenschaft Array#find Methode verwendet, und Sie versuchen, classes Eigentum der String zu erhalten und das ist undefined. Sie müssen also den Eigenschaftswert von Objekt abrufen, indem Sie den Eigenschaftsnamen verwenden, der von Array#find Methode zurückgegeben wird.

0

Sie erhalten nur den Schlüssel. Versuchen:

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);