2017-06-06 5 views
1

Ich habe Probleme mit dem Aufbau eines Arrays in js in ein charts.js Obj übergeben. Ich habe folgendes Array;Build dynamisches Array für charts.js

{"Questions":{"name":"Hello World"},"Options":{"inner":{"No":"723","Yes":"6","Maybe":"0"}}} 

Das wird an die Funktion unten als "Antwort" weitergegeben. Ich möchte jedes Element im "inneren" Array durchgehen und ein Array von Objekten erstellen, die in meine chart.js passen.

function drawChart(response){ 
    var array = JSON.parse(response) 
    var options = array['Options']['inner']; 

    for(var option in options){ 
     var datasetValue = []; 

     datasetValue.push = { 
      value: parseInt(options[option]), 
      color: "#F7464A", 
      highlight: "#FF5A5E", 
      label: option 
     } 
    } 
    console.log(datasetValue); 
    var mydata = { 
     datasetValue 
    } 

    var pieData = [ 
     { 
      value: 300, 
      color: "#F7464A", 
      highlight: "#FF5A5E", 
      label: "Red" 
     }, 
     { 
      value: 50, 
      color: "#46BFBD", 
      highlight: "#5AD3D1", 
      label: "Green" 
     }, 
     { 
      value: 100, 
      color: "#FDB45C", 
      highlight: "#FFC870", 
      label: "Yellow" 
     }, 
     { 
      value: 40, 
      color: "#949FB1", 
      highlight: "#A8B3C5", 
      label: "Grey" 
     }, 
     { 
      value: 120, 
      color: "#4D5360", 
      highlight: "#616774", 
      label: "Dark Grey" 
     } 
    ]; 
    var ctxOptions = { 
     responsive: true, 
     legendTemplate: "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<segments.length; i++){%><li><span style=\"background-color:<%=segments[i].fillColor%>\"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>", 
     showTooltips: false, 
    }; 
    var pie_ctx = document.getElementById("donut").getContext("2d"); 
    var chart = new Chart(pie_ctx).Doughnut(mydata, ctxOptions); 
    } 

Sie können sehen, oben i zwei Arrays haben, meine dynamische Array ich versuche 'datasetValue' und 'pieData' zu bauen. pieData ist ein Beispiel, und wenn ich dieses Array in mein neues Diagramm übergebe, funktioniert das Array gut, aber mein datasetValue scheint nur das letzte Element zu enthalten, sondern alle Objekte wie pieData. Heres eine Ausgabe von meinem console.log (datasetValue);

Was mache ich gerade, um mein Array neu aufzubauen, damit es dem pieData-Array-Format entspricht?

Antwort

2

Ich denke datasetValue.push = { überschreibt die Array.push Funktion für datasetValue. Versuchen Sie datasetValue.push({ anhängen.

Außerdem ist es wahrscheinlich, dass nur der allerletzte Wert wird datasetValue hinzugefügt werden, da dieser bei jeder Iteration sind Zurücksetzen:

for(var option in options){ 
     var datasetValue = []; 
+0

Danke Kumpel, Sie hatten Recht, ich hatte dies innerhalb der für verschoben. Sehen Sie meinen Kommentar unter – gsusonline

+0

@gsusonline sieht es so aus, als würden Sie immer noch die Push-Funktion außer Kraft setzen. Was passiert, wenn Sie versuchen, zu 'datasetValue.push (' anstelle von 'datasetValue.push ='? – mgamba

+0

Oh, das habe ich basierend auf Ihrem Kommentar behoben, ich habe den var-DatensatzWert außerhalb der for-Schleife und machte es. Push ({ eher als .push = { – gsusonline

2

Ihre datasetValue enthält nur letzte Punkt, weil Sie es in für Schleife instanziiert. Jedes Mal, wenn Sie in eine for-Schleife gehen, wird datasetValue neu erstellt (auf ein leeres Array gesetzt), daher protokollieren Sie nur das letzte Element. Sie sollten es außerhalb der for-Schleife instanziieren.

var datasetValue = []; 
for(var option in options){ 

    datasetValue.push = { 
     value: parseInt(options[option]), 
     color: "#F7464A", 
     highlight: "#FF5A5E", 
     label: option 
    } 
} 
+0

Danke, das hat die Schleife korrigiert, also hat mein Array jetzt 3 Objekte - aber es scheint immer noch nicht mein Diagramm zeichnen zu lassen – gsusonline

+0

Es wäre toll, wenn Sie eine Plunker oder Jsfiddle Demo erstellen könnten. – Dino

+0

Sicher, ich werde versuchen, jetzt eine zu erstellen – gsusonline