2017-10-21 22 views
1

J'essaie d'afficher une liste d'éléments avec des variations basées sur un de ses objets. Voir le code ci-dessous pour un aperçu:Mappage d'un tableau imbriqué d'objets dans React Native

data: [{ 
 
    "transportation": [ 
 
    {"id": "1", "name": "bus", "type": "large"}, 
 
    {"id": "2", "name": "bicycle", "type": "small"}], 
 
    
 
    "animal": [ 
 
    {"id": "3", "name": "elephant", "type": "large"}, 
 
    {"id": "4", "name": "mouse", "type": "small"}] 
 
}]

Pour l'exemple ci-dessus, je voudrais afficher laisse dire quelque chose de simple comme du texte « Large » si le type est « grand » et « Petit "text" si le type est "small" La première chose qui me vient à l'esprit est de faire une carte imbriquée (carte externe pour les données, carte interne pour le transport/animal) J'ai commencé par tester la carte intérieure sans la carte externe comme illustré ci-dessous:

data.animal.map((info) => { 
 
    switch (info.type){ 
 
    case "large": 
 
     return(
 
     <View> 
 
     <Text>Large</Text> 
 
     </View>); 
 

 
    case "small": 
 
     return(
 
     <View> 
 
     <Text>Small</Text> 
 
     </View>); 
 
      
 
    default: 
 
     return(
 
     <View> 
 
     <Text>Whatever</Text> 
 
     </View>); 
 
    } 
 
})

J'obtenu

TypeError: Cannot read property 'map' of undefined

Toute idée pourquoi cela se produit?

EDIT:

j'avais essayé de faire une boucle imbriquée en attendant une réponse. Ci-dessous mon extrait de code:

data.map((category, key) => { 
 
    return(
 
    Object.keys(category).map((info) => { 
 
    switch (info.type){ 
 
    case "large": 
 
    return(
 
    <View> 
 
    <Text>Large</Text> 
 
    </View>); 
 
    
 
    case "small": 
 
    return(
 
    <View> 
 
    <Text>Small</Text> 
 
    </View>); 
 
    
 
    default: 
 
    return(
 
    <View> 
 
    <Text>Whatever</Text> 
 
    </View>); 
 
} 
 
    }) 
 
) 
 
})

Il fonctionne sans erreur, mais il ne me donne pas le résultat escompté. Toutes les sorties sont commutées par défaut, c'est-à-dire "Peu importe".

Répondre

1

Vous accédez au premier objet de votre tableau de données. Donc, votre code devrait être

data[0].animal.map((info) => { 
.... 
0

data = [{ 
 
    "transportation": [ 
 
    {"id": "1", "name": "bus", "type": "large"}, 
 
    {"id": "2", "name": "bicycle", "type": "small"}], 
 
    
 
    "animal": [ 
 
    {"id": "3", "name": "elephant", "type": "large"}, 
 
    {"id": "4", "name": "mouse", "type": "small"}] 
 
}] 
 

 

 
data[0].animal.map((info) => { 
 
    return console.log(info) 
 
    } 
 
)