2012-05-23 246 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']; 
});