2016-02-18 20 views
7

現在、Googleグラフを使用してレポートを生成しようとしています。Google Chartsの多次元配列を生成するためのループ多次元配列

私は自分のNode.jsサーバー側のコードでMYSQL DBから情報を引き出し、次のような多次元配列にクライアント側にそれを渡すためにsocket.ioを使用しています:だから

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

私は現在、その配列をループして、それがGoogleのチャートには次の形式であるので、値を引き出すしようとしています:

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

私はこのフォーマットにそれを得ることができないし、そうする方法を見つけるのに苦労していますので、この情報をマルチディメンションに挿入することができますonal配列を使用してレポートを生成します。

私がこれまで持っている現在のコードは次のとおりです。アイデアは、私は最終的に(注ヘッダのように見えるように、多次元データ配列が必要である

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

次の多次元配列を出力

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

答えて

2

編集:これは、値を収集するために関数と一時変数tempを使用します。 3番目の項目ごとに、新しい配列が結果配列にプッシュされます。

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

配列形式は、 'BUSY' [ '477'、728]、私が持っているレイアウトは '[[ 'ANSWERED' は、あなたがデータにレイアウトされたもののようにする必要もありません「478」、「478」、「478」、「478」、「478」、「478」、「478」、 、 '478'、56]] 'あなたはどのようにその形式でそれをしますか?彼らは別々のMD配列ではないので?私は初期の質問 – Studento919

+1

で間違った配列を投稿しましたありがとう、それは素晴らしいソリューションです。 – Studento919