我创建了javascript代码来计算集合中的一些数据。结果是NaN 。如何声明此代码以获取真实结果(int)而不是NaN。
Template.laporankategori.helpers({
profilcount: function() {
var subs = {};
Profil.find().forEach(function(e) {
if (subs[e.kategori] == null)
subs[e.kategori] = 0;
subs[e.kategori] += e.amount;
});
var results = [];
_.each(subs, function (value, key) {
results.push({category: key, amount: value});
});
return results;
}
});
//html
{{#each profilcount}}
<tr>
<td>{{category}}</td>
<td>{{ amount}}</td>
</tr>
{{/each}}
//
Profil = new Mongo.Collection ('profil');
Meteor.subscribe ('profil');
Template.laporankategori.helpers({
profilcount: function() {
return Profil.find({});
}
});
答案 0 :(得分:0)
你需要返回结果数组的长度
return results.length;
答案 1 :(得分:0)
代码看起来很好。但我认为数量以字符串格式存储在数据库中。请尝试以下代码:
subs[e.kategori] += e.amount;
将此行替换为:
subs[e.kategori] += parseInt(e.amount);
建议您将数据以整数格式存储在数据库中。 希望它有所帮助。
答案 2 :(得分:0)
amount
文档中Profil
字段的数据类型是什么?如果它是一个字符串,那么它将追加字符串,而不是将其解析为数字(0 +“1”=“01”)。您可以使用Number
将其解析为此类数字
Profil.find().forEach(function(e) {
if (subs[e.kategori] == null)
subs[e.kategori] = 0;
subs[e.kategori] += Number(e.amount); //<---- Change "e.amount" to "Number(e.amount)"
});
<强>更新强>
我认为有些文件要么没有指定amount
,要么有一个不是数字的值
Profil.find().forEach(function(e) {
if (subs[e.kategori] == null)
subs[e.kategori] = 0;
//if (isNaN(e.amount)) console.log(e.amount.toString() + " is not a valid number"); // <-- Uncomment this line and check your console to see invalid data..
var value = !isNaN(e.amount) ? Number(e.amount) : 0;
subs[e.kategori] += value;
});
答案 3 :(得分:0)
而是适当地使用下面的代码,
var profile = Profil.find().fetch();
var results = _.chain(profile)
.map(function(item){
return {Kategori: kategori, amount: amount};
})
.groupBy('kategori')
.map(function (value,key) {
var reduceVal = _.reduce(value, function (acc, val)
{
return acc + val.amount;
},0 );
return {'Kategori': kategori,'count' :reduceVal};
})
.value();