2016-05-13 23 views
0

です。コレクションのデータを数えるためにjavascriptコードを作成しました。の結果はNaNです。このコードを宣言して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({}); 
    } 
}); 

私はシェルでコマンドをするとき私はこのような結果が欲しいです。 Result 結果はまだこれと似ています。 Result

+0

は、あなたがこれを使用しているHTMLの一部を表示することができます結果。ありがとう。 – JamiDer

+0

また、 'Profil'コレクション – JamiDer

+0

のサンプル文書も入れました。 – nurul

答えて

0

文書のamountフィールドのデータタイプは何ですか?文字列の場合は、数値(0 + "1" = "01")として解析する代わりに、文字列を追加します。私は、文書の一部を考えて、どちらか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; 
}); 
ない値を持っていません。このような数にそれを解析する 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)" 
}); 

UPDATE を使用することができます

+0

私はすでにこのコードをテストしていますが、それと同じ結果です。 – nurul

+0

すべての結果は** 0 **です。それはすべて**カテゴリ** – nurul

+0

@nurul Strange!あなたの質問に1つのProfil文書を追加して、私たちがあなたのデータをよりよく理解できるようにしてください。 – Kishor

0

あなたはコードが正常に見える結果配列

return results.length; 
+0

応答をありがとうが、私は長さを入れてもこのコードはまだ動作しません。 – nurul

0

の長さを返す必要があります。しかし、私は量がデータベースに文字列形式で格納されると思います。で、この行を置き換える

subs[e.kategori] += e.amount; 

:以下のコードを試してみてください

subs[e.kategori] += parseInt(e.amount); 

あなたがあなたのデータベース内の整数の形式で値を保存することをお勧めします。 お手伝いをしてください。

+0

まだ動作していません。結果はまだ** NaN **です。 – nurul

+0

コードを更新しました。あなたのコレクションのデータは数字と文字列の組み合わせです。だからあなたは 'NaN'を得ている理由です。 – JamiDer

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