Pregunta

Si tengo lo siguiente:

{"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"}
   {"Make":"Toyota","Model":"Corolla","Year":"2008"}
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
}

Y tengo un nombre "hdrs" (es decir,"Hacer"), ¿cómo puedo hacer referencia a la data instancias de matriz?parece data["Make"][0] debería funcionar... pero no puedo obtener la referencia correcta

EDITAR

Perdón por la ambigüedad..Puedo recorrer hdrs para obtener cada nombre hdr, pero necesito usar cada valor de instancia de hdrs para encontrar todos los elementos de datos en data (No estoy seguro de que sea una mejor explicación).y lo tendré en una variable t ya que es JSON (agradezco el reetiquetado), me gustaría poder hacer referencia con algo como esto: t.data[hdrs[i]][j]

¿Fue útil?

Solución

Tuve que alterar un poco tu código:

var x = {"hdrs": ["Make","Model","Year"],
         "data" : [ 
           {"Make":"Honda","Model":"Accord","Year":"2008"},
           {"Make":"Toyota","Model":"Corolla","Year":"2008"},
           {"Make":"Honda","Model":"Pilot","Year":"2008"}]
        };

        alert( x.data[0].Make );

EDITAR:en respuesta a tu edición

var x = {"hdrs": ["Make","Model","Year"],
         "data" : [ 
           {"Make":"Honda","Model":"Accord","Year":"2008"},
           {"Make":"Toyota","Model":"Corolla","Year":"2008"},
           {"Make":"Honda","Model":"Pilot","Year":"2008"}]
        };
var Header = 0; // Make
for( var i = 0; i <= x.data.length - 1; i++ )
{
    alert( x.data[i][x.hdrs[Header]] );
}           

Otros consejos

Entonces, ¿así?

var theMap = /* the stuff you posted */;
var someHdr = "Make";
var whichIndex = 0;
var correspondingData = theMap["data"][whichIndex][someHdr];

Eso debería funcionar, si te entiendo correctamente...

var x = {"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"}
   {"Make":"Toyota","Model":"Corolla","Year":"2008"}
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
};

x.data[0].Make == "Honda"
x['data'][0]['Make']  == "Honda"

Tienes tu búsqueda de matriz/hash al revés :)

No estoy seguro de entender tu pregunta, pero...

Suponiendo que el JSON anterior es el var obj, desea:

obj.data[0]["Make"] // == "Honda"

Si solo desea hacer referencia al campo al que hace referencia el primer encabezado, sería algo como:

obj.data[0][obj.hdrs[0]] // == "Honda"

Primero, olvidó las comas finales en los elementos de su matriz de datos.

prueba lo siguiente:

var obj_hash = {
    "hdrs": ["Make","Model","Year"],
    "data" : [
        {"Make":"Honda","Model":"Accord","Year":"2008"},
        {"Make":"Toyota","Model":"Corolla","Year":"2008"},
        {"Make":"Honda","Model":"Pilot","Year":"2008"},
    ]
};

var ref_data = obj_hash.data;

alert(ref_data[0].Make);

@Kent Fredric:tenga en cuenta que la última coma no es estrictamente necesaria, pero le permite mover líneas más fácilmente (es decir, si mueve o agrega después de la última línea y no tenía una coma, tendría que recordar específicamente agregar uno.Creo que es mejor tener siempre comas al final).

tal vez pruebe con datos [0]. Hacer

Cerca, usarías

var x = data[0].Make;
var z = data[0].Model;
var y = data[0].Year;

Su código tal como se muestra no es sintácticamente correcto;necesita algunas comas.Conseguí que esto funcionara:

$foo = {"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"},
   {"Make":"Toyota","Model":"Corolla","Year":"2008"},
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
};

y luego puedo acceder a datos como:

$foo["data"][0]["make"]

Con la ayuda de las respuestas (y después de corregir los bucles interior y exterior) conseguí que esto funcionara:

var t = eval( "(" + request + ")" ) ;
for (var i = 0; i < t.data.length; i++) {
 myTable +=    "<tr>";
 for (var j = 0; j < t.hdrs.length; j++) {
  myTable += "<td>" ;
   if (t.data[i][t.hdrs[j]] == "") {myTable += "&nbsp;" ; }
    else { myTable += t.data[i][t.hdrs[j]] ; }
  myTable += "</td>";
 }
 myTable +=    "</tr>";
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top