2016-02-18 1 views
7

В настоящее время я пытаюсь создать отчет с помощью графиков Google.Loop Многомерный массив для генерации многомерного массива для графиков Google

Я потянув информацию из БД 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 ] ] 

Так Я в настоящее время цикл по этому массиву и пытается вытащить значения, так что в следующем формате для Google Charts:

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

Я не могу получить его в этот формат, и я изо всех сил, чтобы найти способы, чтобы сделать это, так затем я могу вставить эту информацию в мой мультидименси onal для таблиц 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 ]] 

Идея мне нужно массив многомерных данных в конечном итоге выглядеть (заголовок Примечание может быть изменен в коде, только из-за текущего количества значений, с которыми он работает, для его создания):

ответ

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], [ 'BUSY' , '477', 48], ['NO ANSWER', '477', 277], ['ANSWERED', '478', 88], ['BUSY', '478', 24], ['NO ANSWER' , '478', 56]] 'как бы вы сделали это в этом формате? Поскольку они не являются отдельными массивами MD? Я опубликовал массив неправильно в начальном вопросе – Studento919

+1

Спасибо, что это отличное решение. – Studento919

Смежные вопросы