referência de matriz Javascript
-
01-07-2019 - |
Pergunta
Se eu tenho a seguinte:
{"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"}
{"Make":"Toyota","Model":"Corolla","Year":"2008"}
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
}
E eu tenho um "hdrs" nome (ou seja, "Marca"), como posso referenciar os casos de matriz data
?
Parece que data["Make"][0]
deve funcionar ... mas incapaz de obter a referência direita ??p>
Editar
Sorry for a ambiguidade .. Eu posso percorrer hdrs
para obter cada nome HDR, mas eu preciso usar cada valor instância de hdrs
para encontrar todos os elementos de dados em data
(não tenho certeza que é melhor de uma explicação). e eu vou tê-lo em um t
variável, uma vez que é JSON (apreciar a re-tagging) Eu gostaria de ser capaz de referência com algo como isto: t.data[hdrs[i]][j]
Solução
eu tive que alterar seu código um pouco:
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 );
EDIT: em resposta à sua edição
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]] );
}
Outras dicas
Assim, como este?
var theMap = /* the stuff you posted */;
var someHdr = "Make";
var whichIndex = 0;
var correspondingData = theMap["data"][whichIndex][someHdr];
Isso deve funcionar, se eu estou entendendo você corretamente ...
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"
Você tem sua matriz / hash de pesquisa para trás :)
Eu não tenho certeza que eu entendi sua pergunta, mas ...
Assumindo que o acima JSON é o var obj, você quer:
obj.data[0]["Make"] // == "Honda"
Se você quiser apenas para se referir ao campo referenciado pelo primeiro cabeçalho, seria algo como:
obj.data[0][obj.hdrs[0]] // == "Honda"
Primeiro, você esqueceu suas vírgulas de arrasto em seus itens de matriz de dados.
Tente o seguinte:
@ Kent Fredric: nota que a última vírgula não é estritamente necessário, mas permite mover mais facilmente linhas ao redor (ou seja, se você mover ou adicionar após a última linha, e ele não tinha uma vírgula, você tem que se lembrar especificamente para adicionar um. Eu acho que é melhor ter sempre vírgulas à direita.)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);
talvez tente dados [0] .make
Fechar, você usaria
var x = data[0].Make;
var z = data[0].Model;
var y = data[0].Year;
O seu código como exibido não é sintaticamente correto; ele precisa de algumas vírgulas. Eu tenho esse ao trabalho:
$foo = {"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"},
{"Make":"Toyota","Model":"Corolla","Year":"2008"},
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
};
e então eu posso acessar dados como:
$foo["data"][0]["make"]
Com a ajuda das respostas (e depois de obter o interior e loops de fora corrigir) Eu tenho esse ao trabalho:
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>";
}