将数组添加到对象中

12

我正在尝试对 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']; 
      });
  });

你想把对象添加到数组中还是相反的方式? - Bergi
我想将数组XMLObjectDetail添加到对象XMLObject中。 - MG1
在XMLObject中,应该获取哪个属性名称? - Bergi
2个回答

14

在您在评论中澄清了您的请求之后,解决方案就很容易:

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 ""
    });
});

感谢您抽出时间查看我的代码。正如您所见,我对处理Json还很陌生。让我给您一些背景信息。这段代码从csv中提取数据(该csv是从数据库导出的)。然后必须将其显示给用户并允许用户进行某些更改。接着,用户单击按钮,它将被转换为XML。这是我的客户要求的。 - MG1
我认为需要两次循环的原因是,当有相同供应商ID的行时,它们需要分组在一起,并且我需要显示特定值的总和,以及显示每个单独的行(或发票)。你能推荐更好的结构方式吗? - MG1
那么这两个循环是你算法的哪一部分呢?XML序列化吗?我认为你应该提出一个新问题,给我们一些样本数据(序列化的JSON或CSV和你的toJSON解析器),告诉我们你实际上想要通过有问题的代码实现什么以及你遇到了哪些错误。 - Bergi
我刚刚修改了我的问题。希望现在清晰明了。非常感谢您抽出时间来帮助我。http://stackoverflow.com/questions/10835584/creating-a-multidimensional-object-for-xml-export - MG1

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']; 
      });
  });

抱歉,我进行了更正。我正在尝试创建一个包含数组的对象。XMLObject是主对象,XMLObjectDetail是我在第二个循环中分配值的数组。XMLObjectDetail需要位于XMLObject内部。 - MG1
你的对象图是什么样子的?或者说你的数组结构是怎样的?在第一个$.each结构中,data是否包含多个element对象?element是一个对象还是一个数组(即data是一个element数组的数组)? - TheVillageIdiot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接