Comment avoir un foreach dans un foreach en JQuery?
-
11-10-2019 - |
Question
Hé les gars! Tout d'abord, je sais que ce genre de choses est assez merdique, mais c'est la façon dont je visualisons atteindre mon objectif.
Voici l'affaire: j'ai un objet JSON qui contient un tableau, mais malheureusement, je dois parcourir la liste d'un objet JSON, puis itérer throught ce tableau I mencioned avant. Le regard de l'objet JSon comme suit (il est en portugais, mais les gars vous pouvez le comprendre):
{ "Produtos": [{ "clé": "DERIVADOS DE FERRO", "Valeur": 217816909}, { "clés": "MADEIRAS, SUAS MANUFATURAS E Mobiliário MÉDICO CIRÚRGICO " "Valeur": 117812290}, { "clé":" CELULOSE, PAPEL E SUAS OBRAS " "Valeur": 100086937}, { "clé":" Carne Suina " "Valeur": 81738783}, { "clé":" Carne Bovina " "Valeur": 74894768}, { "clé":" CARNE DE AVES », "Valeur": 65292433}, { "clé": "Outros", "Valeur": 444520811}], "ano": 2005, "tipo": 1}
Produtos est le tableau je l'ai mentionné, et j'ai deux autres valeurs qui sont importantes: Ano (année) et tipo (type). Mon apparence de code comme suit:
jQuery.getJSON("/webportos/Porto/GraficoComercio?id=" + iddoporto.className + "&ano=2005", null, function (items) {
jQuery.each(items, function (itemNo, item) {
jQuery.each(item.produtos, function (dicNo, dic) {
options.series.push({ name: dic.Key, data: dic.Value});
options.title.text = "Comércio - "+item.ano;
options.yAxis.title.text = "Exportação";
options.tooltip.formatter = function () {
return '<b><u>' + this.series.name + '</u></b><br/><b>' + this.x + '</b>: ' + this.y + ' ';
}
});
});
chart = new Highcharts.Chart(options);
});
Ce morceau de code rend la console de Chrome à afficher:
ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js:32 Uncaught TypeError: Cannot read property 'length' of undefined
Pouvez-vous les gars me aider?
La solution
Est-ce parce que vous essayez d'utiliser .each () sur un tableau non?
jQuery.each(items, function (itemNo, item) {
De ma compréhension, jQuery.each (objet, rappel, args) est uniquement pour une utilisation sur des tableaux. La première chose qu'il fait est de faire un appel à object.length. Donc, à moins que vous avez
[ { "Produtos": [{ "clé": "DERIVADOS DE FERRO", "Valeur": 217816909}, { "clés": "MADEIRAS, suas MANUFATURAS E Mobiliário MÉDICO CIRÚRGICO " "Valeur": 117812290}, { "clé":" CELULOSE, PAPEL E SUAS OBRAS " "Valeur": 100086937}, { "clé": "CARNE suina", "Valeur": 81738783}, { "clé":" Carne Bovina », "Valeur": 74894768}, { "clé": "CARNE DE AVES", "Valeur": 65292433}, { "Clé": "Outros", "Valeur": 444520811}], "ano": 2005, "tipo": 1} ]
vous allez obtenir cette erreur.
En outre, vous pouvez prendre la suggestion de Diodeus en considération. jQuery.each est un peu moins performant que juste en utilisant un pour faire une boucle à travers vos données.
Autres conseils
Vous n'avez pas besoin jQuery pour itérer les données JSON. Utilisez simplement vieux Javascript.
Voir cette question: Affichage JSON / hiérarchie YAML comme un arbre en HTML?
function renderJSON(obj) {
var keys = []
var retValue = ""
for (var key in obj) {
if(typeof obj[key] == 'object') {
retValue += "<div class='tree'>" + key
retValue += renderJSON(obj[key])
retValue += "</div>"
}
else {
retValue += "<div class='tree'>" + key + " = " + obj[key] + "</div>"
}
keys.push(key)
}
return retValue
}