2013-05-08 227 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){ 

     } 
    }); 
});