Javascript 按月份统计通话组

Javascript 按月份统计通话组,javascript,graph,grid,Javascript,Graph,Grid,数据:您可以在下图中看到: 我想这样显示这些数据:(特定月份有多少电话) 我想在所有的月份都这样做 对于Graph,我编写了如下函数:(但我也尝试对table使用相同的逻辑,但似乎不起作用。) 任何人都可以帮我在桌子上做同样的事情 getGraphData2( data,config) { var year = new Date().getUTCFullYear()-1; var month = new Date().getMonth()+10;

数据:您可以在下图中看到:

我想这样显示这些数据:(特定月份有多少电话)

我想在所有的月份都这样做

对于Graph,我编写了如下函数:(但我也尝试对table使用相同的逻辑,但似乎不起作用。)

任何人都可以帮我在桌子上做同样的事情

getGraphData2( data,config) {
        var year = new Date().getUTCFullYear()-1;
        var month = new Date().getMonth()+10;
        var fullMonths = config.Filter.filter(f => f.type === "Monthly");
        var monthsThisYear = config.Filter.filter(f => f.type === "Monthly" && f.key <= month && f.key > (month - 12));
        var monthsLastYear = config.Filter.filter(f => f.type === "Monthly" && f.key > (12 - (12 - monthsThisYear.length)));
        var months = [];
        months.push(...monthsThisYear);
        months.push(...monthsLastYear);

        var labels = months.map(m => m.value);
        var targetTypes = this.state.resultsGraph.map(m => ({Name: m.Name}));
        var fData = {};
        targetTypes.forEach(f => {
            fData[f.Name] = { label: f.Name, data: fullMonths.map(m => 0) };
        });
        if (this.state.results !== null) {
            for (var c = 0; c < this.state.resultsGraph.length; c++) {
                var call = this.state.resultsGraph[c];
                if (call !== undefined && call !== null) {
                    var cDate = new Date(call.Call_Date_vod__c); //ConvertToDate(call.call_Date_vod__c);
                    if (cDate != null && ((cDate.getMonth() + 1) <= month && cDate.getFullYear() === year) || (month < (cDate.getMonth() + 1) && cDate.getFullYear() === (year - 1))) {
                        var targetType = call.Name;
                        if (targetType !== undefined && targetType !== null) {
                            var actData = fData[targetType];
                            if (actData !== undefined && actData !== null)
                                actData.data[cDate.getMonth()] = actData.data[cDate.getMonth()] + 1;
                            else {
                                actData = fData["NoTarget"];
                                actData.data[cDate.getMonth()] = actData.data[cDate.getMonth()] + 1;
                            }
                        }
                        else {
                            var actData = fData["NoTarget"];
                            actData.data[cDate.getMonth()] = actData.data[cDate.getMonth()] + 1;
                        }
                    }
                }
            }
        }


        fData = Object.keys(fData).map(k => fData[k]);

        fData = fData.filter(f => f.data.filter(d => d > 0).length > 0);

        for (var i = 0; i < fData.length; i++) {
            var fdat = fData[i];
            var data = fdat.data;
            fdat.data = months.map(m => data[(m.key - 1)]);
        }


        var ds = fData.map((m, index) => ({
            label: m.label,
            data: m.data,
            stack: "stack1",
            backgroundColor: labels.map(l => (this.props.selectGraphFilter === l) ? getCanvasPattern(config.BackgroundColor[index]) : config.BackgroundColor[index]),
            hoverBackgroundColor: labels.map(l => (this.props.selectGraphFilter === l) ? getCanvasPattern(config.HoverBackgroundColor[index]) : config.HoverBackgroundColor[index]),
        }));


        var graphData = {
            labels: labels,
            datasets: ds,
        };

        return graphData;
 }
getGraphData2(数据,配置){
var year=新日期()。getUTCFullYear()-1;
变量月份=新日期().getMonth()+10;
var fullMonths=config.Filter.Filter(f=>f.type==“Monthly”);
var monthsticeyear=config.Filter.Filter(f=>f.type==“Monthly”和&f.key(月-12));
var monthslatyear=config.Filter.Filter(f=>f.type==“Monthly”和&f.key>(12-(12-monthstiseyear.length));
var月数=[];
月份。推送(…今年的月份);
月份。推送(…去年的月份);
var标签=months.map(m=>m.value);
var targetTypes=this.state.resultsGraph.map(m=>({Name:m.Name}));
var fData={};
targetTypes.forEach(f=>{
fData[f.Name]={label:f.Name,数据:fullMonths.map(m=>0)};
});
if(this.state.results!==null){
for(var c=0;cf.data.filter(d=>d>0.length>0);
对于(变量i=0;idata[(m.key-1)];
}
var ds=fData.map((m,索引)=>({
标签:m.label,
数据:m.data,
堆栈:“堆栈1”,
backgroundColor:labels.map(l=>(this.props.selectGraphFilter==l)?getCanvasPattern(config.backgroundColor[index]):config.backgroundColor[index]),
hoverBackgroundColor:labels.map(l=>(this.props.selectGraphFilter==l)?getCanvasPattern(config.hoverBackgroundColor[index]):config.hoverBackgroundColor[index]),
}));
变量graphData={
标签:标签,
数据集:ds,
};
返回图形数据;
}

如何像这样聚合它

const data = this.state.resultsGraph.reduce(
  (actData, call) => {
    if (actData) {
      actData[call.Name][
        `${call.Call_Date_vod__c.getMonth()} ${call.Call_Date_vod__c.getFullYear()}`
      ] =
        (actData[call.Name][
          `${call.Call_Date_vod__c.getMonth()} ${call.Call_Date_vod__c.getFullYear()}`
        ] || 0) + call.Call;
    }

    return actData;
  },
  {
    Staff: {},
    Account: {}
  }
);

你能分享你的原始数据吗?@Domino987我已经附上了我的原始数据的截图?
const data = this.state.resultsGraph.reduce(
  (actData, call) => {
    if (actData) {
      actData[call.Name][
        `${call.Call_Date_vod__c.getMonth()} ${call.Call_Date_vod__c.getFullYear()}`
      ] =
        (actData[call.Name][
          `${call.Call_Date_vod__c.getMonth()} ${call.Call_Date_vod__c.getFullYear()}`
        ] || 0) + call.Call;
    }

    return actData;
  },
  {
    Staff: {},
    Account: {}
  }
);