Referencia de matriz de JavaScript
-
01-07-2019 - |
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]
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:
@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).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);
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 += " " ; }
else { myTable += t.data[i][t.hdrs[j]] ; }
myTable += "</td>";
}
myTable += "</tr>";
}