Javascript在集合后计算平均值

时间:2016-06-30 00:09:59

标签: javascript average dc.js crossfilter

我正在使用crossfilterdc.js来制作信息中心。

我有什么?

让我们考虑一下这些文件:

{
    "Mkt_Al": "AZA",
    "Orig" : "PTH",
    "Dest" : "GMP",
    "Qsi"  :  2

}

{
    "Mkt_Al": "AZA", // here the same triplet
    "Orig" : "PTH",
    "Dest" : "GMP",
    "Qsi"  :  3

}

{
    "Mkt_Al": "AZA", // here the same triplet
    "Orig" : "PTH",
    "Dest" : "GMP",
    "Qsi"  :  4

}

我想要什么?

我应该按三元组(Mkt_AlOrigDest)对文档进行分组,然后我应该计算该组中Qsi的平均值。

    {
        "Mkt_Al"  : "AZA",
        "Orig"    : "PTH",
        "Dest"    : "GMP",
        "Qsi"     :  2,
        "Avg_Qsi" : 3


    }

    {
        "Mkt_Al"  : "AZA", // here the same triplet
        "Orig"    : "PTH",
        "Dest"    : "GMP",
        "Qsi"     :  3,
        "Avg_Qsi" : 3
    }

    {
        "Mkt_Al"  : "AZA", // here the same triplet
        "Orig"    : "PTH",
        "Dest"    : "GMP",
        "Qsi"     :  4,
        "Avg_Qsi" : 3

    }

怎么做?

我有一个dataSet,并且dc.js datatable我试图绘制一个数据表,其中的列将计算这个平均值:

 {
                label: 'Average Qsi in this route', 
                format: function (d) 
   {
                var total=0,avg=d.Qsi;
                for (var i = 0; i < dataSet.length; i++) 
      {
  if (dataSet[i].Mkt_Al == d.Mkt_Al
   && dataSet[i].Orig == d.Orig  
   && dataSet[i].Dest == d.Dest)
  { total = total+1; avg=(avg+dataSet[i].Qsi/total); }

       }
                   return avg;
    }
 }

请问我怎样才能实现上述目标?

1 个答案:

答案 0 :(得分:0)

我离结果非常近:

 {
                label: 'Average Qsi in this route', 
                format: function (d) 
   {
                var total=0,qsi=0; // our counters
                for (var i = 0; i < dataSet.length; i++) 
      {
  if (dataSet[i].Mkt_Al == d.Mkt_Al
   && dataSet[i].Orig == d.Orig  
   && dataSet[i].Dest == d.Dest)
  { total++ ; qsi =dataSet[i].Qsi+qsi; } // here total calculate the number of flights with these condition and qsi calculate the sum of documents's qsi which verify these results

       }

                   return (qsi/total).toFixed(3); 
    }
 }