2016-02-18 10 views
7

Ich versuche gerade, einen Bericht mit Google Charts zu generieren.Loop Multidimensionales Array zum Generieren multidimensionaler Arrays für Google Charts

Ich bin ziehen Informationen aus einer MYSQL DB in meinem node.js serverseitigen Code und mit socket.io es zu der Client-Seite in einem mehrdimensionalen Array übergeben, die wie folgt aussieht: So

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

ich Looping zur Zeit durch das Array und zu versuchen, die Werte zu ziehen, so dass es in folgendem Format für Google Charts ist:

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

ich kann es nicht in dieses Format erhalten und habe Schwierigkeiten, Wege zu finden, dies zu tun, so Dann kann ich diese Information in meine multidimensions einfügen Array für Google-Tabellen erstellen und einen Bericht generieren.

Der aktuelle Code, den ich bisher habe, ist:

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); 
     } 
    }); 

, das die folgenden mehrdimensionales Array gibt:

[['Call Disposition', 'Answered'],['477',277 ]] 

Die Idee ist, ich die multidimensionale Datenmatrix müssen schließlich wie (Hinweis Header aussehen kann in Code geändert werden, nur aufgrund der aktuellen Menge von Werten bin ich damit beschäftigt, um es aufzubauen):

[['Call Disposition', 'Answered','Busy','Failed'],['477', 728, 48, 277 ],[ '478',88, 24, 56]] 

Antwort

2

Bearbeiten: Dies verwendet eine Funktion und eine temporäre Variable temp zum Sammeln von Werten. Jedes dritte Element, ein neues Array wird an das Ergebnis-Array gesendet.

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

Hat das Array-Format wie sein müssen, was Sie in Daten angelegt, das Layout ich habe, ist '[[ 'BEANTWORTET', '477', 728], [ 'BUSY' , 477 ', 48], [KEINE ANTWORT', '477', 277], ['ANTWORTEN', '478', 88], ['BESETZT', '478', 24], '' KEINE ANTWORT '' , 478 ', 56]] Wie würdest du es in diesem Format machen? Da sie keine separaten MD-Arrays sind? Ich habe das Array in der ersten Frage falsch geschrieben – Studento919

+1

Vielen Dank das ist eine großartige Lösung. – Studento919

Verwandte Themen