extjs 存储:总和字段,其中 acct = 12345

extjs store: sum field where acct = 12345

我正在尝试对我的 extjs 存储中的特定字段求和,其中 accountNumber = 'x'。 现在我正在循环,我想知道是否有更快的方法。 就像是 var sum = grid.getStore().sum('NameColumn').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);

没有什么比遍历整个列表更快的了,但是有一些东西可以为您编写代码:

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

在幕后,这与您的代码类似,但可读性和可重用性更高。

那么,这里发生了什么?

  • store.query 为您提供 MixedCollection,其中仅包含特定 属性 与特定值匹配的那些条目。如果使用 queryBy,您可以轻松编写更复杂的匹配函数。要生成此集合,它会遍历商店中的所有记录。
  • MixedCollection 有一个方法 sum,它采用 属性 名称,然后遍历集合中的所有记录并对命名的 属性.
  • 求和

所以它可能甚至比你的代码慢几纳秒,但如果你经常需要它,在代码的不同部分,你可以节省在线路上的字节数。