2016-02-18 121 views
7

我目前正在嘗試使用Google圖表生成報告。循環多維數組爲Google Charts生成多維數組

我從一個MySQL數據庫在我的Node.js服務器端代碼中提取信息,並使用socket.io將它傳遞到客戶端多維數組看起來像下面這樣:

[ [ 'ANSWERED', '477', 728 ],[ 'BUSY', '477', 48 ],[ 'NO ANSWER', '477', 277 ],[ 'ANSWERED', '478', 88 ],[ 'BUSY', '478', 24 ],[ 'NO ANSWER', '478', 56 ] ] 

所以我目前通過數組循環,並試圖拉出值,所以它是在谷歌圖表的格式如下:

[ ['477', 728, 48, 277 ],[ '478',88, 24, 56]] 

我不能進入這個格式,我在努力想辦法這樣做,所以然後我可以將這些信息插入我的multidimensi用於Google表格的onal數組並生成報告。

當前的代碼我至今是:

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'],['477', 728, 48, 277 ],[ '478',88, 24, 56]] 

回答

2

編輯:它使用一個函數和一個臨時變量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', '477', 728], ['BUSY', '477', 48], ['NO ANSWER', '477', 277], ['ANSWERED', '478', 88], ['BUSY', '478', 24], ['NO ANSWER', '478', 56]], 
 
    result = [['Call Disposition', 'Answered', 'Busy', 'Failed']].concat(x(data)); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

+0

是否陣列格式必須像你在數據奠定了什麼,佈局我是'[「回答」,「477」,728],[「忙」 477',48],['NO ANSWER','477',277],['ANSWERED','478',88],['BUSY','478',24],['NO ANSWER' ,'478',56]]'你會怎麼做這種格式?因爲它們不是獨立的MD陣列?我在最初的問題 – Studento919

+1

中發佈了錯誤的數組謝謝你這是一個很好的解決方案。 – Studento919