2016-03-30 32 views
0

我有,我用在表上的平均數據的列過濾器:角過濾器返回不尋常的結果

app.filter('avgByKey', function() { 
return function (data, key) { 
    if (typeof (data) === 'undefined' || typeof (key) === 'undefined') { 
     return 0; 
    } 
    var total = 0 
    for (var i = 0; i < data.length; i++) { 
     total += data[i][key]; 
    } 
    var avg = total/data.length; 
    avg = Math.round(avg); 
    return parseInt(avg); 
} 

})

我用它像這樣在我的HTML:

{{y.yearDetails|avgByKey:'" + $scope.columns[i].vchAssociatedDetailColumn + "'}} 

過濾器按預期工作,直到我更改其中一個單元格中的數據。如果我在其中一個單元格中更改數字,它會返回一個數字,如「14578993057614092」作爲平均值。我有一個幾乎相同的過濾器,我在同一張桌子上使用以獲得列的總和:

app.filter('sumByKey', function() { 
return function (data, key) { 
    if (typeof (data) === 'undefined' || typeof (key) === 'undefined') { 
     return 0; 
    } 

    var sum = 0; 
    for (var i = data.length - 1; i >= 0; i--) { 
     //sum += parseFloat(data[i][key]); 
     sum += Math.round((data[i][key]) * 100)/100; 
    } 
    if (sum < 1) { 
     return parseFloat(sum.toPrecision(2)); 

    } 
    else { 
     return sum; 

    } 
}; 

});

即使我在其中一個單元格中更改數字,它也可以很好地工作。如果在使用平均過濾器更改單元格中的某個數字後,我刷新頁面,則過濾器將顯示「正確」的答案,但我必須刷新頁面以獲取它。任何人都可以告訴我爲什麼我的平均過濾器正在展示這種行爲,以及我如何修復它?

這裏是一個Plunker示出發生的情況:Example

+1

你可以提供一些HTML代碼或JsFiddle來更好地理解場景嗎? –

+0

我已經添加了一個Plunker來演示這個行爲。 –

回答

1

使用 - 總+ = parseInt(數據[I] [鍵]);將解決這個問題。

app.filter('avgByKey', function() { 
    return function (data, key) { 
     if (typeof (data) === 'undefined' || typeof (key) === 'undefined') { 
      return 0; 
     } 
     var total = 0 
     for (var i = 0; i < data.length; i++) { 
      total += parseInt(data[i][key]); 
     } 
     var avg = total/data.length; 
     avg = Math.round(avg); 
     return parseInt(avg); 
    } 
}); 
+0

非常感謝!那樣做了。 –

+0

我很樂意提供幫助! –

0

您的輸入被解析爲字符串值,因此未按照您的期望添加。

相反,它們被連接成數的一個很長的字符串,如'3' + '5' + '7' = '357'

你需要將它們解析爲使用parseInt()號碼。

app.filter('avgByKey', function() { 
    return function (data, key) { 
     if (typeof (data) === 'undefined' || typeof (key) === 'undefined') { 
      return 0; 
     } 
     var total = 0 
     for (var i = 0; i < data.length; i++) { 
      total += parseInt(data[i][key]); 
     } 
     var avg = total/data.length; 
     avg = Math.round(avg); 
     return parseInt(avg); 
    } 
}); 
相關問題