Как иметь foreach внутри foreach в JQuery? - PullRequest
0 голосов
/ 14 января 2011

Эй, ребята! Прежде всего, я знаю, что такие вещи довольно дерьмовые, но именно так я визуализирую достижение своей цели.

Вот в чем дело: у меня есть объект JSon, который содержит массив, но, к сожалению, я должен выполнить итерацию по списку одного объекта JSon, а затем выполнить итерацию по тому массиву, который я упоминал ранее. Объект JSon выглядит следующим образом (он на португальском, но вы, ребята, можете это понять):

{"produtos": [{"Key": "DERIVADOS DE FERRO", "Value": 217816909}, {"Key": "MADEIRAS, SUAS MANUFATURAS E MOBILIÁRIO MÉDICO CIRÚRGICO " "Значение": 117812290}, { "Key":" Celulose, PAPEL E SUAS Obras " "Значение": 100086937}, { "Key":" CARNE SUÍNA " "Значение": 81738783}, { "Key":" CARNE БОВИНА "," Значение ": 74894768}, {" Ключ ":" КАРНЕ ДЕ АВЭС», "Значение": 65292433}, { "Key": "Outros", "Значение": 444520811}], "ано": 2005, "типо": 1}

Produtos - это упомянутый мною массив, и у меня есть два других важных значения: 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);              
});

Этот фрагмент кода отображает консоль JavaScript в Chrome:

ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js:32 Uncaught TypeError: Cannot read property 'length' of undefined

Можете ли вы, ребята, помочь мне?

Ответы [ 2 ]

2 голосов
/ 14 января 2011

Это потому, что вы пытаетесь использовать .each () не для массива?

jQuery.each(items, function (itemNo, item) {

Насколько я понимаю, jQuery.each (object, callback, args) предназначен только для использования с массивами. Первое, что он делает - это вызывает object.length. Так что, если у вас нет

[ {"produtos": [{"Key": "DERIVADOS DE FERRO", "Value": 217816909}, {"Key": "MADEIRAS, SUAS MANUFATURAS E MOBILIÁRIO MÉDICO CIRÚRGICO "," Value ": 117812290}, {" Key ":" CELULOSE, PAPEL E SUAS " OBRAS "," Value ": 100086937}, {" Key ":" CARNE SUÍNA "," Value ": 81738783}, {" Key ":" CARNE БОВИНА "," Значение ": 74894768}, {" Ключ ":" КАРН ДЕ АВЕС "," Значение ": 65292433}, { "Key": "Outros", "Значение": 444520811}], "ано": 2005, "типо": 1} ]

вы получите эту ошибку.

Кроме того, вы можете принять во внимание предложение Диодея. jQuery.each немного менее эффективен, чем просто использование for для циклического просмотра ваших данных.

2 голосов
/ 14 января 2011

Вам не нужен jQuery для итерации по данным JSON. Используйте старый добрый Javascript.

См. Этот вопрос: Показать иерархию JSON / YAML в виде дерева в 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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...