2012-05-23 293 views
0

我想通過在循環結束時進行比較來打印'sum'的唯一值,但是我看到每次它執行比較時它已經移動到下一個元素,因此當它比較兩個值時,它們總是相同的。有沒有另一種方法來做到這一點?循環通過Json對象

$(document).ready(function(){ 
    $.getJSON('XML.php', function(data) { 
     JSON.stringify(data); 
     var prevCardCode = ''; 

     $.each(data, function(index, element){ 
      var prevCardCode = element['CardCode']; 

      if (!(element['CardCode'] == prevCardCode)) { 

       var sum = element['payment_sum'] + '<br/>'; 
       $('#showdata').append(sum); 
       } 
       alert(element['CardCode'] + 'compare' + prevCardCode); 
     }); 

    }); 
}); 

回答

1

var關鍵字不中的每一個在這種情況下屬於,你需要在比較之後將其移動到。

var prevCardCode = ''; 
$.each(data, function(index, element) { 
    if (!(element['CardCode'] == prevCardCode)) { 
     var sum = element['payment_sum'] + '<br/>'; 
     $('#showdata').append(sum); 
    } 
    alert(element['CardCode'] + 'compare' + prevCardCode); 
    prevCardCode = element['CardCode']; 
});​ 

如果varprevCardCode之前留在原地,它永遠不會設置$.each之外定義的,並不會結轉到的$.each下一個迭代。

+0

工作正常!謝謝!你能解釋爲什麼那樣嗎? – MG1

+1

我以爲我解釋得很好。基本上,如果包含'var'關鍵字,那麼您正在'$ .each'範圍內創建一個新變量,而不是使用父範圍中的現有變量。此外,您需要在爲下一次迭代覆蓋它之前比較該值。 –

0

prevCardCode不是先例元素,但目前的...然後你比較當前當前...

如果你想先例元素與目前的相比,你應該使用一段時間或do而。

var i = 1; 
var precedentEl = array[0]; 

while (i < array.length) { 

    // Do some stuff like compare current and precedent 

    precedentEl = array[i]; 
    i++; 
} 

其次,你叫XML.php其返回JSON ......這奇怪的聲音......

1

您需要的prevCharCode任務移動到循環的末端,在它的前面取出var

var prevCardCode = ''; 
$.each(data, function(index, element) { 
    if (!(element['CardCode'] == prevCardCode)) { 
     // your code... 
    } 

    prevCardCode = element['CardCode']; 
});