金额结果为NaN

时间:2016-05-13 05:25:30

标签: javascript meteor

我创建了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({});
    }
});

当我使用shell命令时,我想要这样的结果。 Result 现在结果还是这样的。 Result

4 个答案:

答案 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();