2016-03-30 31 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); 
    } 
}); 
相关问题