2008-10-07 15 views
6

¿Cómo referenciaría los modelos (Accord, CRV, Prius, etc.) en esta estructura? ¿Es esta una mala estructura para poder extraer las marcas ... luego usar una marca para obtener los modelos ... luego usar el modelo para obtener las opciones?Referenciando una matriz literal de objeto 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"] } 
     ] 
    } 
];    

Gracias

Respuesta

7

la estructura:

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'] } 
     ]} 
]; 

que escribió sobre el recorrido y todo lo demás here.

+0

Elegí esta respuesta porque respondió la pregunta "¿Es esta mala estructura ...?" que fue sí ... al agregar "nombres" fijos (es decir, nombre, modelos, etc.) me permite iterar sobre los datos con bucles (y otras formas como Marko Dumic puso en su otra respuesta) gracias –

6

coches [0] .models.Accord coches [0] .models.CRV coches [0] .models.Pilot (Véase la respuesta olliej 's)

sin embargo, puede ser más fácil usar el siguiente concepto de acceso:

cars.Honda.Accord 
cars.Toyota.Prius 

... usando ...

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

Jonathan es correcto, pero se perdió el nivel adicional de Array en el nivel del modelo, por lo que debe haber

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

etc

Sospecho que le resulte más fácil de usar una estructura a lo largo de las líneas 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"] 
} 
}]; 

En el que la matriz de models se sustituye por un objeto (o array asociativo si se quiere)

[editar (olliej): poner en orden el código en el segundo ejemplo]

0

Si yo fuera tú, no me agrupar a todos sus datos en una gran matriz multidimensional/objeto literal como desorden ese. Encapsularía cada objeto y usaría métodos para acceder a los datos. Te meterá con tu cerebro mucho menos.

+0

Parece una respuesta JSON, por lo que no hay ningún método para usted. –

+0

La forma correcta de usar JSON es agregar una capa de envoltura de código sobre su función raw eval() (principalmente por razones de seguridad). En esa capa, puedes encapsular tus datos con un poco de trabajo. Sería una buena idea, al menos. –

2

se pueden desplazar los modelos con este código:

 
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] 
    } 
} 

pero estoy de acuerdo con Olliej sobre el cambio de la estructura de su JSON a su formato.

Cuestiones relacionadas