我如何将数据传递到对象数组中

Posted

技术标签:

【中文标题】我如何将数据传递到对象数组中【英文标题】:how can i pass data into array of object 【发布时间】:2017-06-16 22:17:02 【问题描述】:

我这里有这样的数据,

var dataArray = '["name":"books","value":43,"name":"DVDs","value":99,"name":"Magazines","value":37,"name":"eBooks","value":88,"name":"Other awesome things","value":67]';

我想用这个数据动态地构造这个chart,这意味着我的json在实际项目中会很大,它来自database

这里是我想要的 chart 的 jsfiddle(我的情况是动态的):http://jsfiddle.net/artefactory/m4on9L4p/

//canvasJS example - doughnut chart showing collection breakdown.   

var dataArray = '["name":"books","value":43,"name":"DVDs","value":99,"name":"Magazines","value":37,"name":"eBooks","value":88,"name":"Other awesome things","value":67]';

window.onload = function () 
    var chart = new CanvasJS.Chart("chartContainer",
    
      title:
        text: "What's in our collection"
      ,
      data: [
      
       type: "doughnut",
        // how to substitute above array here
       dataPoints: [
         y: 53.37, indexLabel: "Books" ,
         y: 35.0, indexLabel: "DVDs" ,
         y: 7, indexLabel: "Magazines" ,
         y: 2, indexLabel: "eBooks" ,
         y: 5, indexLabel: "Other awesome things" 
       ]
     
     ]
   );

    chart.render();
  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/canvasjs/1.4.1/canvas.min.js"></script>
 <div id="chartContainer" style="height: 300px; width: 100%;">  </div>

我想建这个

dataPoints: [
             y: 53.37, indexLabel: "Books" ,
             y: 35.0, indexLabel: "DVDs" ,
             y: 7, indexLabel: "Magazines" ,
             y: 2, indexLabel: "eBooks" ,
             y: 5, indexLabel: "Other awesome things" 
           ]

动态地使用我的 json。我该怎么做?

问题:我想使用json 来构建图形,而不是使用hardcoded 值?

【问题讨论】:

【参考方案1】:

使用JSON.parse()Array.prototype.map()函数的解决方案:

...
dataPoints:  JSON.parse(dataArray).map(function (o) 
    return y: o.value, indexLabel: o.name;
)
...

【讨论】:

【参考方案2】:

值 53.37、35.0 是如何得出的?它们的推导有数学公式吗?

如果您只是将“名称”映射到 indexLabel 并将“值”映射到 x,那么这段代码应该可以工作。

var desiredObj = x.map(function(currentElement) return x: currentElement.value, indexLabel: currentElement.name);

【讨论】:

哈哈@Dinesh Verma,你在问什么,我想让dataPoints:[] 被我的json 取代就是这样【参考方案3】:

您可以像这样使用 jQuery map 函数:

var myNewDataArray = $.map(dataArray,function(a,b)
    return 
        y : a.value,
        indexLabel : a.name
    
);

【讨论】:

以上是关于我如何将数据传递到对象数组中的主要内容,如果未能解决你的问题,请参考以下文章

SWIG:如何将 C++ 对象数组从 C# 传递到 C++?

如何将对象类型的 json 数组传递给 MVC 控制器类

如何将数据从对象传递到javascript中的新数组?

如何将 JSON 对象内的 JSON 数组传递给 jQuery 自动完成

如何使用 AJAX (jquery) 将嵌套的对象数组传递和接收到 c# WebMethod 中?

如何将数组从 Laravel Blade 传递到 Laravel 6/Vue 2.6 中的 Vue 组件。*