我目前正在尝试使用Google图表生成报告.
我从我的node.js服务器端代码中的MysqL DB中提取信息,并使用socket.io将其传递到多维数组中的客户端,如下所示:
[ [ 'ANSWERED','477',728 ],[ 'BUSY',48 ],[ 'NO ANSWER',277 ],[ 'ANSWERED','478',88 ],24 ],56 ] ]
因此,我正在循环遍历该数组并尝试提取值,因此它采用以下格式的Google图表:
[ ['477',728,48,[ '478',88,24,56]]
我无法将其转换为这种格式,并且很难找到这样做的方法,因此我可以将此信息插入到Google表的多维数组中并生成报告.
到目前为止,我目前的代码是:
socket.on("sql",function (valueArr) { google.charts.load('current',{ packages : ['corechart'] }); google.charts.setOnLoadCallback(drawMaterial); function drawMaterial() { var data = []; var Header = ['Call Disposition','Answered']; data.push(Header); for (i in valueArr) { var index = 0; var foundIndex = false; var agent = valueArr[i][1]; var callcount = valueArr[i][2]; for (var i in data) { var dataElem = data[i]; if (dataElem[0] === agent) { index = i; foundIndex = true; data[index][i] = callcount; } } if (foundIndex === false) { var chanar = new Array(agent); data.push(chanar); } } console.log(data); var options = { title : 'Call Disposition',hAxis : { title : 'Agents',minValue : 0,},vAxis : { title : 'Disposition Number' },isStacked : true }; var chartdata = new google.visualization.arrayToDataTable(data); var material = new google.visualization.ColumnChart(document.getElementById('chart')); material.draw(chartdata,options); } });
其中输出以下多维数组:
[['Call Disposition','Answered'],['477',277 ]]
我的想法是我需要多维数据数组最终看起来像(注意标题可以在代码中更改它只是由于当前正在使用的值来构建它):
[['Call Disposition','Answered','Busy','Failed'],56]]
解决方法
编辑:这使用函数和临时变量temp来收集值.每隔三个项目,一个新数组被推送到结果数组.
function x(data) { var r = [],temp; data.forEach(function (a,i) { if (!(i % 3)) { temp = [a[1]]; r.push(temp); } temp.push(a[2]); }); return r; } var data = [['ANSWERED',728],['BUSY',48],['NO ANSWER',277],['ANSWERED',88],24],56]],result = [['Call Disposition','Failed']].concat(x(data)); document.write('<pre>' + JSON.stringify(result,4) + '</pre>');