2013-05-08 117 views
1

我有一个嵌套循环。在最内层的循环中,我创建了数组,当控件从内层循环中出来时,我将内层循环中形成的整个数组复制到新数组中。阵列被覆盖

问题是这些值最终被越过了。 我拥有的数据将用于2个外部循环,每个循环将分别具有5个和24个内部循环。

但最终我得到的总数据是来自最后一个循环的数据。

这里是js代码:

$(document).ready(function(){ 
$.ajax({ 
    url: "Sample.xsd", 
    dataType: "html", 
    success: function(data){ 
     var xmlObj = $.parseXML(data); 

     var buff = $(xmlObj).find("xs\\:complexType"); 

     var xmlObj1 = [];   var buff1 = []; 
     var j = 0; 
     $(buff).each(function(i){ 

      buff1.splice(0, buff1.length); 
      $this = $(this); 

      $this.find("xs\\:element").each(function(index){ 
       buff1[index] = $(this).attr('name'); 
      }); 
      xmlObj1[j] = buff1; 
      console.log(xmlObj1); 
      j++; 
     }); 


     console.log(xmlObj1); 
    }, 
    error: function(err){ 

    } 
}); 
}); 

如果你想我可以将XSD文件也是如此。但我认为它很重要。

谢谢。

回答

0

老实说我觉得你太过分了。以下应该给你预期的结果:

$(function() { 
    $.ajax({ 
     url: "Sample.xsd", 
     dataType: "html", 
     success: function(data) { 
      var xmlObj = $.parseXML(data), xmlObj1 = new Array(), 
       buff = $(xmlObj).find("xs\\:complexType"); 

      $(buff).each(function(i) { 
       var buff1 = new Array(); 
       $(this).find("xs\\:element").each(function(ii) { 
        buff1[ii] = $(this).attr('name'); 
       }); 
       xmlObj1[i] = buff1; 
      }); 

      console.log(xmlObj1); 
     }, 
     error: function(err) { 
      console.log(err); 
     } 
    }); 
}) 

jsFiddle基于类似的想法。

+0

其实你是对的。当我将buff1数组作为本地数组时,它的工作就像魅力一样。但是,当它不在循环中时,会出现什么问题?究竟发生了什么导致覆盖数组? – 2013-05-08 12:25:49

+0

谢谢强硬.. :) – 2013-05-08 12:26:55

+0

你的拼接方法是你的问题。 Splice最好用于在构建数组后对其进行操作,但在您的场景中,您仍在构建数组,因此拼接不太合适。我还没有彻底测试过它以支持我的说法,这只是我的第一个猜测。当我看到你在做什么(构建一个多维阵列)时,我想,“我每天都这样做!没有必要拼接和推动所有的事情!”因此,我只是简单地按照我自己编写代码的方式重写了代码。 – SpYk3HH 2013-05-08 13:07:03

0

在开始新循环之前,尝试将其重新分配为空数组值。

+0

我很抱歉,但我没有得到你。 – 2013-05-08 12:04:10

0

您可以将buff1作为$(buff).each循环的局部变量。

$(document).ready(function(){ 
    $.ajax({ 
     url: "Sample.xsd", 
     dataType: "html", 
     success: function(data){ 
      var xmlObj = $.parseXML(data), xmlObj1 = []; 
      var buff = $(xmlObj).find("xs\\:complexType"); 
      $(buff).each(function(i){ 
       var buff1 = [], $this = $(this); 
       $this.find("xs\\:element").each(function(index){ 
        buff1.push($(this).attr('name')); 
       }); 
       xmlObj1.push(buff1) 
      }); 

      console.log(xmlObj1); 
     }, 
     error: function(err){ 

     } 
    }); 
});