2012-05-31 4 views
9

Я пытаюсь выполнить цикл через Json дважды: один раз для родительских элементов, а затем снова для более подробной информации. (В конечном итоге это будет экспортировано в XML). Тем временем, как я могу добавить массив к объекту? Мой текущий код не создает XMLObjectDetailДобавление массива в объект

XMLObject = {}; 
var XMLObjectDetail = []; 

$.each(data, function(index, element) { 
     XMLObject.CardCode = element['CardCode'] 
     XMLObject.CardName = element['CardName']; 
     console.log(XMLObject); 

    $.each(element, function(key, value) { 
     XMLObject[[XMLObjectDetail.InvPayAmnt]] = value['InvPayAmnt']; 
     }); 
    }); 
+0

Вы хотите добавить объект в массив или наоборот? – Bergi

+0

Я хотел бы добавить массив XMLObjectDetail к объекту XMLObject. – MG1

+0

Какое имя свойства должно быть в XMLObject? – Bergi

ответ

11

После выяснены ваш запрос в комментарии, решение легко :

var XMLObject = {}; 
var XMLObjectDetail = []; 
XMLObject["XMLObjectDetail"] = XMLObjectDetail; 

вы можете сократить его

var XMLObjectDetail, XMLObject = {XMLObjectDetail: XMLObjectDetail = []}; 

Однако, я должен упомянуть некоторые серьезные недостатки в вашем коде:

XMLObject = {}; // no var keyword: the variable will be global 
var XMLObjectDetail = []; 

$.each(data, function(index, element) { 
    // I don't know how your data object/array looks like, but your code will be 
    // executed many times 
    // For each element, you will overwrite the properties 
    XMLObject.CardCode = element['CardCode'] // missing semicolon 
    XMLObject.CardName = element['CardName']; 
    // so that the final XMLObject will only contain cardcode and -name of the last one 
    // It will depend on your console whether you see different objects 
    // or the same object reference all the time 
    console.log(XMLObject); 

    // This part is completey incomprehensible 
    // you now loop over the properties of the current element, e.g. CardCode 
    $.each(element, function(key, value) { 
     // and again you only overwrite the same property all the time 
     XMLObject[[XMLObjectDetail.InvPayAmnt]] = value['InvPayAmnt']; 
     // but wait: The property name you try to set is very, um, interesting. 
     // first, XMLObjectDetail is still an (empty) Array and has 
     // no 'InvPayAmnt' property - leads to a undefined 
     // then, you build an Array with that [undefined] value as the only item 
     // OMG, an array? JavaScript does only allow strings as property names, 
     // so the array will be converted to a string - resulting to the empty string "" 
    }); 
}); 
+0

Спасибо, что нашли время, чтобы посмотреть на мой код. Как вы можете сказать, я новичок в работе с Json. Это даст вам данные из csv (который состоит из экспорта из db). Затем он должен отображать его пользователю и позволять ему вносить определенные изменения. Затем, он нажимает кнопку, и он преобразуется в XML. Это требования моих клиентов. – MG1

+0

Причина, по которой я думал сделать цикл дважды, заключается в том, что, когда есть строки с одинаковым идентификатором поставщика, их необходимо сгруппировать, и мне нужно чтобы отобразить сумму для определенных значений, а также показать каждую отдельную строку (или счет-фактуру). Можете ли вы порекомендовать лучший способ структурировать это? – MG1

+0

Итак, какая часть вашего алгоритма - эти два цикла? Сериализация XML? задайте новый вопрос, предоставив нам некоторые образцы данных (сериализованный JSON, или th CSV и ваш JSON-парсер), что вы на самом деле пытаетесь достичь с помощью проблемной части кода и каких ошибок вы сталкиваетесь. – Bergi

3

Если вы хотите добавить объекты для XMLObject в массив XMLObjectDetail сделать так:

var XMLObject, XMLObjectDetail = []; 

$.each(data, function(index, element) { 
     XMLObject=new Object(); //or XMLObject = {}; 
     XMLObject.CardCode = element['CardCode'] 
     XMLObject.CardName = element['CardName']; 
     console.log(XMLObject); 

     XMLObjectDetail.push(XMLObject);//ADDED OBJECT TO ARRAY 

     //DON'T KNOW WHAT ARE YOU TRYING TO DO HERE? 
     $.each(element, function(key, value) { 
      XMLObjectDetail[[XMLObjectDetail.InvPayAmnt]] = value['InvPayAmnt']; 
     }); 
    }); 
+0

Извините, что я исправлю ошибку. Я пытаюсь создать объект с массивом внутри него. XMLObject является основным объектом, а XMLObjectDetail - это массив, которому я присваиваю значения во втором цикле. XMLObjectDetail должен находиться внутри XMLObject. – MG1

+0

Каков ваш граф объекта? или как структурированы ваши массивы? does 'data' (в первой конструкции' .each') содержит несколько объектов 'element'? является 'element' объектом или массивом (то есть' data' является массивом массива 'element'? – TheVillageIdiot

Смежные вопросы