2008-10-07 5 views
6

Comment référenceriez-vous les modèles (Accord, CRV, Prius, etc.) dans cette structure? Est-ce une mauvaise structure pour pouvoir extraire les marques ... puis utiliser une marque pour obtenir les modèles ... puis utiliser le modèle pour obtenir les options?Référencement d'un tableau littéral d'objets javascript

var cars = [ 
    { 
     "makes" : "Honda", 
     "models" : [ 
      {'Accord' : ["2dr","4dr"]} , 
      {'CRV' : ["2dr","Hatchback"]} , 
      {'Pilot' : ["base","superDuper"] } 
     ] 
    }, 
    { 
     "makes" : "Toyota", 
     "models" : [ 
      {'Prius' : ["green","reallyGreen"]} , 
      {'Camry' : ["sporty","square"]} , 
      {'Corolla' : ["cheap","superFly"] } 
     ] 
    } 
];    

Merci

Répondre

7

La structure:

var cars = [ 
    { name: 'Honda', models: [ 
       { name: 'Accord', features: ['2dr', '4dr'] }, 
       { name: 'CRV', features: ['2dr', 'Hatchback'] }, 
       { name: 'Pilot', features: ['base', 'superDuper'] } 
     ]}, 

    { name: 'Toyota', models: [ 
       { name: 'Prius', features: ['green', 'superGreen'] }, 
       { name: 'Camry', features: ['sporty', 'square'] }, 
       { name: 'Corolla', features: ['cheap', 'superFly'] } 
     ]} 
]; 

je l'ai écrit au sujet de la traversal et tout le reste here.

+0

J'ai choisi cette réponse parce qu'elle répondait à la question "Est-ce que c'est une mauvaise structure ...?" ce qui était oui ... en ajoutant des "noms" fixes (c'est-à-dire nom, modèles, etc.) ça me permet d'itérer sur les données avec des boucles (et d'autres façons comme Marko Dumic a mis dans son autre réponse) merci –

6

voitures [0] .models.Accord voitures [0] .models.CRV voitures [0] .models.Pilot (Voir la réponse de olliej)

Cependant, il peut être plus facile d'utiliser le concept d'accès suivant:

cars.Honda.Accord 
cars.Toyota.Prius 

... en utilisant ...

var cars = { 
    Honda : { 
    Accord : ["2dr", "4dr"], 
    CRV : ["2dr", "Hatchback"], 
    Pilot : ["base", "superDuper"] 
    }, 
    Toyota : { 
    Prius : ["green", "reallyGreen"], 
    Camry : ["sporty", "square"], 
    Corolla : ["cheap", "superFly"] 
    } 
}; 
+0

cars [0] .models.Accord // etc – eyelidlessness

3

de Jonathan est correct, mais il a manqué de niveau supplémentaire de tableau au niveau du modèle, il devrait donc être

cars[0].models[0].Accord 
cars[0].models[1].CRV 

etc

Je pense que vous trouverez qu'il est plus facile d'utiliser une structure le long des lignes de:

var cars = [ 
{makes : "Honda", 
models : { 
    Accord : ["2dr","4dr"], 
    CRV : ["2dr","Hatchback"], 
    Pilot: ["base","superDuper"] 
} 
}, 
{makes :"Toyota", 
models : { 
    Prius : ["green","reallyGreen"], 
    Camry : ["sporty","square"], 
    Corolla : ["cheap","superFly"] 
} 
}]; 

dans lequel le réseau models est remplacé par un objet (ou tableau associatif si vous aimez)

[modifier (olliej): rangement code second exemple]

0

Si je vous, je ne serais pas Lump toutes vos données dans un grand tableau multidimensionnel/objet désordre littéral comme cette. Je encapsulerais chaque objet et utiliserais des méthodes pour accéder aux données. Ça dérangerait beaucoup moins votre cerveau.

+0

Cela ressemble à une réponse JSON, donc pas de méthode pour vous. –

+0

La bonne façon d'utiliser JSON est d'ajouter une couche de code wrapper sur votre fonction eval() brute (principalement pour des raisons de sécurité). À cette couche, vous pouvez correctement encapsuler vos données avec un peu de travail. Ce serait une bonne idée, au moins. –

2

Vous pouvez parcourir les modèles avec ce code:

 
for (var i = 0, carslen = cars.length; i < carslen; i++) { 
    for (var j = 0, modelslen = cars[i].models.length; j < modelslen; j++) { 
     // do something with cars[i].models[j] 
    } 
} 

mais je suis d'accord avec Olliej de changer la structure de votre JSON à son format.