2016-06-20 19 views
0

Ich versuche ein bestimmtes Feld in meinem extjs Speicher WHERE accountNumber = 'x' zu summieren. Ich laufe gerade durch und frage mich, ob es einen schnelleren Weg gibt. Etwas wie var sum = grid.getStore(). Sum ('NameColumn'). Where ('acct') = 12345;extjs speichern: Summe Feld wo acct = 12345

das ist, wie ich es jetzt tue ...

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

Antwort

1

Es gibt nichts, das über die ganze Liste schneller ist als laufen, aber es ist etwas, das für Sie weit weniger zu codieren ist:

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

Unter der Haube verhält sich das ähnlich wie Ihr Code, aber es ist viel besser lesbar und wiederverwendbar.

Also, was ist hier los?

  • store.query gibt Ihnen eine MixedCollection nur die Einträge enthalten, in denen eine bestimmte Eigenschaft einen bestimmten Wert übereinstimmt. Sie könnten einfach komplexere Matching-Funktionen schreiben, wenn Sie queryBy verwenden. Um diese Collection zu generieren, werden alle Datensätze im Store durchlaufen.
  • Die MixedCollection hat eine Methode sum, die einen Eigenschaftsnamen übernimmt und dann alle Datensätze in der Auflistung iteriert und die benannte Eigenschaft summiert.

es Sie in den verschiedenen Teilen des Codes, also kann sogar einige Nanosekunden langsamer als der Code sein, aber wenn man es oft benötigen, Bytes auf dem Draht speichern.

+0

danke für die detaillierte Erklärung. Ich werde es oft verwenden, aber wenn Sie denken, dass seine Nanosekunden langsamer sind als ich, sollte ich wahrscheinlich den leichteren Ansatz mit weniger Code verwenden. Nanosekunden werden höchstwahrscheinlich kein Problem sein. Vielen Dank! – solarissf