2016-06-20 9 views
0

私のextjsストアで、accountNumber = 'x'の特定のフィールドを合計しようとしています。 現在、私はループしていますが、より速い方法があるかどうかは疑問です。 のようなもの var sum = grid.getStore()。sum( 'NameColumn')。ここで( 'acct')= 12345;extjs store:sum field where acct = 12345

これは私が今それをやっている方法です...

 for (var i = 0; i < listCount; i++) { 

     sum = 0; 
     singleAccount = accountList[i];    

     //go through calc store, sum pnl column 
     calculatedPositionsDataStore.each(function (record) { 
      var tempAcctNum = record.get('AcctNum'); 
      if (tempAcctNum === singleAccount) 
      { 
       tempAcctDesc = record.get('AcctShortCode'); 
       tempTradeLevel = record.get('TradingLevel'); 
       var pnl = record.get('CalcPLSett'); 

       sum = sum + pnl; 
      } 
     }, this); 

答えて

1

リスト全体を反復処理よりも高速だものはありませんが、あなたのためにコーディングするはるかに少ないです何かがあります:

var sum = calculatedPositionsDataStore.query("AcctNum", singleAccount).sum("CalcPLSett"); 

これはあなたのコードと同じように動作しますが、はるかに読みやすく再利用可能です。

ここで何が起こっていますか?

  • store.queryは、特定のプロパティが特定の値と一致するエントリのみを含むMixedCollectionを提供します。 queryByを使用すると、より複雑なマッチング関数を簡単に書くことができます。このコレクションを生成するには、ストア内のすべてのレコードに対して実行されます。
  • MixedCollectionにはメソッドsumがあります。このメソッドはプロパティ名を取り、コレクション内のすべてのレコードを繰り返し処理し、名前付きプロパティを合計します。

だから、もあなたのコードよりも遅く、いくつかのナノ秒かもしれないが、あなたは、多くの場合、それを必要とする場合、コードのさまざまな部分で、あなたがワイヤ上でバイトを保存します。

+0

詳細な説明はありがとうございます。私はそれを頻繁に使用しますが、ナノ秒が遅いと思うなら、おそらくコードの方が簡単です。おそらくナノ秒は問題にはなりません。ありがとう! – solarissf

関連する問題