2016-04-23 47 views
1

我對javascript有一個疑問。動態數組javascript

我有服務器陣列負載:

var dados = [{'ano':2016,'id':1,'mes':1,'valor':87},{'ano':2016,'id':2,'mes':2,'valor':17},{'ano':2016,'id':3,'mes':3,'valor':26}] 

後,我得到我需要的值:

var valores = new Array(); 
for(var i=0; i < dados.length; i++) { 
valores.push(dados[i].valor); 
} 

現在是疑問。我如何將值加載到Chart.js?

var lineChartData = { 
datasets : [{ 
    //ommited others configs.. 
    data : valores (I would like load de values of valores here)  
}]} 
+0

chart.js期望'valores'數據以什麼格式呈現,String,Array ,Oblect ..? –

+0

呃...'datasets:[{data:valores}]'不應該做正確的? Vocêjánãoestápassando/atribuindo'valores' a'data'? – felipsmartins

+0

只調用var valores圖表不起作用 –

回答

0

不,圖表將採用一個數組作爲其中的對象的輸入。數據集不能是數組,它應該是一個對象集合。

您的JSON數據應該像

var lineChartData = { 
    data : [{ 
     'valor':87 
    },{ 
     'valor':22 
    }] 
} 

現在只是看你改正上述JSON傳遞到圖表。 希望這會解決你的問題。

+0

謝謝,但文檔顯示數據集可以是數組。 [鏈接](http://www.chartjs.org/docs/#bar-chart-data-structure) –

1

valores VAR必須是一個對象,而不是規則排列type.So它應該是這樣的:

enter image description here

請看下面的代碼:

<html> 
 
<body> 
 
<canvas id='myChart'></canvas> 
 
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.min.js'></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.1.1/Chart.js"></script> 
 
<script> 
 
\t var dados = [ 
 
\t \t {'ano':2016,'id':1,'mes':1,'valor':87}, 
 
\t \t {'ano':2016,'id':2,'mes':2,'valor':17}, 
 
\t \t {'ano':2016,'id':3,'mes':3,'valor':26} 
 
\t ]; 
 
\t var valores = { 
 
\t \t // labels like month (mes/mês - I noticed you're a portuguese speaker) 
 
\t \t labels: [], 
 
\t \t datasets: [ 
 
\t \t \t {label: null, data: []} 
 
\t \t \t //more items here whether you want 
 
\t \t ]   
 
\t }; 
 
\t 
 
\t for (var index in dados) { 
 
\t \t currData = dados[index]; 
 
\t \t valores.labels.push('Mês ' + currData['mes']); 
 
\t \t valores.datasets[0]['data'].push(currData['valor']); 
 
\t } 
 
\t 
 
\t var ctx = $("#myChart").get(0).getContext("2d"); 
 
\t var myLineChart = new Chart(ctx).Line(valores); 
 
</script> 
 
</body> 
 
</html>