角度过滤器返回异常结果
Angular Filter Returns Unusual Results
我有一个过滤器,用于对表上的一列数据进行平均:
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,它显示了发生的事情:示例
使用-total+=parseInt
(data[i][key]);将解决这个问题。
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);
}
});
您的输入被解析为字符串值,因此不会以您期望的方式相加。
相反,它们被连接成一个非常长的数字串,比如'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);
}
});
相关文章:
- 奇怪的Javascript结果
- Javascript(jQuery)给了我奇怪的结果
- JSONP请求返回结果,但也触发error_callback
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Javascript,输出结果后页面不断刷新
- 这是使用html快照和谷歌获取的预期结果吗?SEO/SPA
- 将地理编码结果转换为php变量以发布到mysql数据库
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- JQuery:向多个匹配结果添加换行符的最简单方法
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- webpack代码拆分了handlerbs文件——结果是文件很大
- JavaScript循环无法正确计算/显示结果
- 点击谷歌结果页面时,HtmlUnit中出现JavaScript异常
- 向模板实例变量传递调用方法调用的结果时出现异常
- 在HTML中隐藏/显示表单会产生异常结果
- 角度过滤器返回异常结果
- InvalidStateError:XPath结果出现DOM异常11
- 流星:在传递调用方法的结果时出现异常
- 在传递调用'createUser'的结果时出现异常
- XSJS总是从ajax调用返回异常结果集