2016-04-23 113 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>