Google Chart с динамическим массивом

1

Как преобразовать этот массив для добавления в новую переменную данных диаграммы google:

var array_column =["Year","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
var array_rows = ["2014", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.67, 0, "2015", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.33, 0, "2016", 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 2.67, "2017", 2, 0, 0, 4.33, 2.67, 0, 2.5, 0, 0, 0, 0, 0, "2018", 0, 0, 2.17, 0, 0, 0, 0, 0, 0, 0, 0, 0]

В основном array_rows динамически добавляется 13. На array_column фиксируется длина 13. Есть ли способ, как добавить array_rows выше на 13 и сделать это так?

 var newData = [
['Year', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
["2014", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.67, 0],
["2015", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.33, 0],
["2016", 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 2.67],
["2017", 2, 0, 0, 4.33, 2.67, 0, 2.5, 0, 0, 0, 0, 0],
["2018", 0, 0, 2.17, 0, 0, 0, 0, 0, 0, 0, 0, 0]
         ];

      // in this case the first column is of type 'string'.
      dataTable.addColumn('string', newData[0][0]);

      // all other columns are of type 'number'.
      for (var i = 1; i < numCols; i++)
        dataTable.addColumn('number', newData[0][i]);           

      // now add the rows.
      for (var i = 1; i < numRows; i++) 
        dataTable.addRow(newData[i]);        

      // redraw the chart.
      chart.draw(dataTable, options);    

/ / -------------------- обновляется --------------------------- ----

var array_column = ["Year","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
var array_rows = ["2014", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.67, 0, "2015", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.33, 0, "2016", 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 2.67, "2017", 2, 0, 0, 4.33, 2.67, 0, 2.5, 0, 0, 0, 0, 0, "2018", 0, 0, 2.17, 0, 0, 0, 0, 0, 0, 0, 0, 0]

var splice=13;
var arr = array_rows;
var newarr = new Array();

console.log("newarr_column: "+array_column);

for (var i=0; i<arr.length; i=i+splice) {
    newarr.push(arr.slice(i,i+splice));
    console.log("slice: "+arr.slice(i,i+splice))
}


//Is this correct?
 var newData = [array_column,newarr];

и это дает мне эту ошибку в диаграмме google:

Изображение 174551

Когда я использовал эту переменную, она сработала.

var newData = [
    ['Year', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
    ["2014", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.67, 0],
    ["2015", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.33, 0],
    ["2016", 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 2.67],
    ["2017", 2, 0, 0, 4.33, 2.67, 0, 2.5, 0, 0, 0, 0, 0],
    ["2018", 0, 0, 2.17, 0, 0, 0, 0, 0, 0, 0, 0, 0]
             ];
  • 1
    Логика разбиения массива на куски можно найти здесь
  • 0
    Я только что обновил проблему.
Теги:
google-visualization

1 ответ

1
Лучший ответ

Я изменил ваш код, чтобы он соответствовал тому, что вы уже написали, но его можно немного очистить.

Проблема с вашим первоначальным решением заключается в том, что это утверждение,

var newData = [array_column,newarr];

создает массив с массивом столбцов в качестве первого элемента и второй массив, содержащий массивы с строками. Для того, чтобы диаграмма работала, вам нужно иметь один массив с столбцами в качестве первого элемента, а первая строка - как второй элемент, вторая строка - как третий элемент и так далее...

Вот почему я модифицировал ваш код, чтобы нажать массив array_column в массив результатов до того, как строки будут разбиты (спасибо @WhiteHat)

newarr.push(array_column);

Вот модифицированный код:

var array_column = ["Year","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
var array_rows = ["2014", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.67, 0, "2015", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.33, 0, "2016", 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 2.67, "2017", 2, 0, 0, 4.33, 2.67, 0, 2.5, 0, 0, 0, 0, 0, "2018", 0, 0, 2.17, 0, 0, 0, 0, 0, 0, 0, 0, 0]

var splice=13;
var arr = array_rows;
var newarr = new Array();

console.log("newarr_column: "+array_column);

newarr.push(array_column);

for (var i=0; i<arr.length; i=i+splice) {
    newarr.push(arr.slice(i,i+splice));
    console.log("slice: "+arr.slice(i,i+splice))
}

newData = newarr;
  • 1
    может быть проще просто добавить array_column в newarr прежде чем разрезать строки, тогда все готово ...
  • 0
    @ WhiteHat да, вы правы, я внесу это изменение в ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню