2017-07-27 6 views
1

Wie dieses Array konvertieren in Google Chart neue Datenvariable hinzuzufügen:Google Chart mit dynamischen Array

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] 

Grundsätzlich sind die array_rows werden dynamisch von 13. Am array_column hinzugefügt wird mit der Länge von 13 festen Ist gibt es einen Weg, wie die array_rows oben um 13 hinzuzufügen und es so machen?

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

// -------------------- aktualisiert -------------------- -----------

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];

und es gibt mir diesen Fehler in google Chart:

enter image description here

Wenn ich d diese Variable hat funktioniert.

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

Die Logik zum Teilen des Arrays in Stücke finden Sie [hier] (https://stackoverflow.com/questions/8495687/split-array-into-chunks) – James

+0

Ich habe gerade das Problem aktualisiert. –

Antwort

1

Ich habe den Code konsistent zu sein, modifiziert mit, was Sie bereits geschrieben haben, aber es kann ein wenig gereinigt werden.

Das Problem mit der Ausgangslösung ist, dass diese Aussage,

var newData = [array_column,newarr]; 

wird einen Array mit den Spalten-Array als erstes Element und ein zweites Array zu schaffen, dass der Arrays mit den Reihen enthält. Damit das Diagramm funktioniert, benötigen Sie ein Array mit den Spalten als erstes Element und der ersten Zeile als zweitem Element, der zweiten Zeile als drittem Element usw.

Deshalb ich änderte den Code der array_column in das Ergebnis-Array zu schieben, bevor die Zeilen aufgeteilt werden (dank @WhiteHat)

newarr.push(array_column); 

Hier ist der modifizierte Code:

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

könnte einfacher sein, einfach 'array_column' zu' newarr' hinzuzufügen, bevor die Zeilen geschnitten werden, dann ist das erledigt ... – WhiteHat

+0

@WhiteHat ja, du hast recht, ich werde diese Änderung auf die Antwort ändern. – rolspace