2017-07-27 57 views
1

如何转换此阵列在谷歌添加图表新的数据变量:谷歌图用动态数组

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的长度 是有一种方法,如何将13上面的array_rows添加到像这样?

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

// -------------------- updated -------------------- -----------

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

,这让我这个错误在谷歌图表:

enter image description here

当我使用d它工作的这个变量。

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

将数组拆分为块的逻辑可以在这里找到(https://stackoverflow.com/questions/8495687/split-array-into-chunks) – James

+0

我刚更新了这个问题。 –

回答

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',然后完成... – WhiteHat

+0

@WhiteHat是的,你说得对,我会将该更改作为答案。 – rolspace