jqueryのforeach内にforeachを持つ方法は?
-
11-10-2019 - |
質問
やあみんな!まず第一に、私はこの種のものが非常にくだらないことを知っていますが、それが私の目標を達成することを視覚化する方法です。
ここに取引があります。配列を含むJSONオブジェクトがありますが、残念ながら、1つのJSONオブジェクトのリストを繰り返してから、以前に作成した配列を繰り返します。 JSONオブジェクトは次のように見えます(それはポルトガル語ですが、皆さんはそれを理解できます):
{"produtos":[{"key": "derivados de ferro"、 "value":217816909}、{"key": "madeiras、suas manufaturas e mobiliriomédicocirúrgico"、 "value":11781290}、{"" key key ":" Celulose、Papel e Suas Obras "、" Value ":100086937}、{" key ":" carnesuína "、" value ":81738783}、{" key ":" carne bovina "、" value ":74894768 }、{"key": "carne de aves"、 "value":65292433}、{"key": "outros"、 "value":444520811}]、 "ano":2005、 "tipo":1}
Produtosは私が言及した配列であり、私は重要な他の2つの値を持っています:ANO(年)とTipo(タイプ)。私のコードは次のように見えます:
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);
});
このコードは、Chrome JavaScriptコンソールを表示します。
ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js:32 Uncaught TypeError: Cannot read property 'length' of undefined
あなたたちは私を助けてくれませんか?
解決
これは、非配列で.each()を使用しようとしているからですか?
jQuery.each(items, function (itemNo, item) {
私の理解から、jquery.each(オブジェクト、コールバック、args)は、配列でのみ使用するためです。それが最初に行うことは、object.lengthを呼び出すことです。あなたが持っていない限り
[{"produtos":[{"key": "derivados de ferro"、 "value":217816909}、{"key": "madeiras、suas manufaturas e mobiliriomédicocirúrgico"、 "value":11781290}、{"" key key ":" Celulose、Papel e Suas Obras "、" Value ":100086937}、{" key ":" carnesuína "、" value ":81738783}、{" key ":" carne bovina "、" value ":74894768 }、{"key": "carne de aves"、 "value":65292433}、{"key": "outros"、 "value":444520811}]、 "ano":2005、 "tipo":1}]
あなたはそのエラーを得るつもりです。
さらに、Diodeusの提案を考慮に入れることができます。 jquery.eackは、データを使用するだけではなく、パフォーマンスがかなり少なくなります。
他のヒント
JSONデータを繰り返すためにjQueryは必要ありません。普通の古いJavaScriptを使用してください。
この質問を参照してください: HTMLのツリーとしてJSON/YAML階層を表示しますか?
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
}