Javascript 为charts.js构建动态数组

Javascript 为charts.js构建动态数组,javascript,chart.js,Javascript,Chart.js,我在js中构建数组以传递到charts.js obj时遇到问题。我有以下数组 {"Questions":{"name":"Hello World"},"Options":{"inner":{"No":"723","Yes":"6","Maybe":"0"}}} 作为“响应”传递给下面的函数。我想循环遍历“内部”数组中的每个项目,并构建一个对象数组以传递到我的chart.js中 function drawChart(response){ var array = JSON.parse(re

我在js中构建数组以传递到charts.js obj时遇到问题。我有以下数组

{"Questions":{"name":"Hello World"},"Options":{"inner":{"No":"723","Yes":"6","Maybe":"0"}}}
作为“响应”传递给下面的函数。我想循环遍历“内部”数组中的每个项目,并构建一个对象数组以传递到我的chart.js中

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);
  }
我在重建数组以匹配pieData数组格式时正在做什么?

我认为datasetValue.push={正在重写datasetValue的array.push函数。请尝试datasetValue.push{以追加

此外,由于您在每次迭代中都会重置datasetValue,因此很可能只会将最后一个值添加到datasetValue中:

for(var option in options){
      var datasetValue = [];
我认为datasetValue.push={正在重写datasetValue的Array.push函数。请尝试使用datasetValue.push{进行追加

此外,由于您在每次迭代中都会重置datasetValue,因此很可能只会将最后一个值添加到datasetValue中:

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

您的datasetValue只包含最后一项,因为您在for循环中实例化了它。每次进入for循环时,datasetValue都将被重新创建并设置为空数组,因此您只记录“last”项。您应该在for循环外实例化它

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

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

您的datasetValue只包含最后一项,因为您在for循环中实例化了它。每次进入for循环时,datasetValue都将被重新创建并设置为空数组,因此您只记录“last”项。您应该在for循环外实例化它

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

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

谢谢,这纠正了循环,所以我的数组现在有3个对象-但是,它似乎仍然不能使我的图表绘制。如果你能创建一个plunker或JSFIDLE演示,那就太好了。当然,我现在会尝试创建一个。谢谢,这纠正了循环,所以我的数组现在有3个对象-但是,它似乎仍然不能使我的图表绘制效果更好如果你能创建一个plunker或JSFIDLE演示。当然,我现在会尝试创建一个。谢谢你,伙计,你是对的,我已经把这个移到了for中。请看我的评论below@gsusonline看起来您仍在重写push函数。如果您尝试切换到datasetValue.push而不是datasetValue.push=,会发生什么情况?哦,我已经根据您的建议解决了这个问题在您的注释中,我将var datasetValue移到for循环之外,并使其成为.push{而不是.push={我猜你应该传递底线DoughnutdatasetValue,CtxOptions就这样!!!谢谢伙计,你完全正确,图表读取的是一个基本数组而不是对象数组。再次感谢Hanks伙计,你是对的,我将此移到了for中。请看我的评论below@gsusonline看来你还活着g push函数。如果您尝试切换到datasetValue.push而不是datasetValue.push=,会发生什么情况?哦,我已经修复了这个问题,根据您的评论,我将var datasetValue移到for循环之外,并使其成为。push{而不是.push={我猜你应该传递底线DoughnutdatasetValue,ctxOptions就是这样!!!谢谢伙计,你完全正确,图表读取的是基本数组而不是对象数组。再次感谢