2016-06-20 3 views
0

Я пытаюсь суммировать определенное поле в моем магазине extjs. WHERE accountNumber = 'x'. Прямо сейчас я зацикливаюсь, и мне интересно, есть ли более быстрый способ. Что-то вроде var sum = grid.getStore(). Sum ('NameColumn'). Где ('acct') = 12345;Магазин extjs: поле суммы, где 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

Смежные вопросы