2012-05-31 15 views
9

Estoy tratando de recorrer a través de Json dos veces: una para los elementos principales y otra vez para obtener más detalles. (Esto finalmente se exportará a XML) Mientras tanto, ¿cómo hago para agregar una matriz a un objeto? Mi código actual no crea XMLObjectDetailagregando matriz al Objeto

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

¿Quieres añadir el objeto a la matriz o al revés? – Bergi

+0

Me gustaría agregar la matriz XMLObjectDetail al objeto XMLObject. – MG1

+0

¿Qué nombre de propiedad debería obtenerse en el XMLObject? – Bergi

Respuesta

11

Después de que aclaró su petición en los comentarios, la solución es fácil :

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

puede acortarlo a

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

Sin embargo, necesito mencionar algunos defectos graves en su código:

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

Gracias por tomarse el tiempo para ver mi código. Como puede ver, soy nuevo en el trabajo con Json. Te daré un poco de información: este código está tomando datos de una csv (que se compone de una exportación desde un db). Luego debe mostrarlo al usuario y permitirle hacer ciertos cambios. hace clic en un botón y se convierte en un XML. Estos son los requisitos de mis clientes. – MG1

+0

La razón por la que pensé hacer un ciclo dos veces es porque cuando hay filas con el mismo ID de proveedor, deben agruparse y necesito para mostrar la suma de ciertos valores. Además de mostrar cada fila individual (o factura). ¿Puede recomendar una mejor manera de estructurar esto? – MG1

+0

Entonces, ¿qué parte de su algoritmo son estos dos bucles? ¿La serialización XML? Creo que debería haga una nueva pregunta, dándonos algunos datos de muestra (el JSON serializado, o th e CSV y tu toJSON-parser), lo que realmente tratas de lograr con la parte problemática del código y los errores que encuentras. – Bergi

3

Si desea agregar objetos de XMLObject a la matriz XMLObjectDetail hacer como esto:

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

Perdón, se corrigió un error. Estoy tratando de crear un objeto con una matriz dentro de él. XMLObject es el objeto principal y XMLObjectDetail es la matriz a la que estoy asignando valores en el segundo ciclo. XMLObjectDetail debe estar dentro de XMLObject. – MG1

+0

¿Cuál es su gráfico de objetos? o ¿cómo están estructurados tus arrays? ¿'datos' (en el primer constructo' $ .each') contiene 'objetos' '' múltiples? es 'elemento' un objeto o una matriz (es decir' datos' es una matriz de 'elemento' matriz? – TheVillageIdiot

Cuestiones relacionadas