如何在javascript中动态地向数组添加项目

首先,我是一个完整的JavaScript新手,所以请耐心等待。 我有以下脚本使用Highchart框架绘制饼图

$(function() { var options = { colors: ["#66CC00", "#FF0000", "#FF6600"], chart: { renderTo: 'container', plotBackgroundColor: null, plotBorderWidth: null, plotShadow: true }, title: { text: 'Host Status' }, tooltip: { formatter: function() { return '' + this.point.name + ': ' + this.total; } }, plotOptions: { pie: { allowPointSelect: true, cursor: 'pointer', dataLabels: { enabled: true, color: '#000000', connectorColor: '#000000', formatter: function() { return '' + this.point.name + ''; } } } }, series: [{ type: 'pie', name: 'service status', data: [] }] } var chart; options.series.data.push('[' Service Ok ', 45.0]') $(document).ready(function() { chart = new Highcharts.Chart(options) }); });​ 

我想要做的是将值动态加载到series.data数组作为对象数组。 这里有什么问题,是否有更好的方法将数据加载到数据arrays?

series属性是一个数组,所以你需要像这样编写它(为系列添加一个数据点):

 options.series[0].data.push( ["Service Ok", 45.0 ]); 

我正在看这个JS小提琴 。

您的代码有错误:
你说你想动态加载值,rigth?
但是你的代码只是设置了初始的serie数据,然后再渲染它。
因此,在您的情况下,如果您想“动态地”更改您的系列数据,您必须销毁当前图表,更新它的数据然后再次渲染它。 可能你会失去表现

正确的方法是使用highstock api,不要手动更新。 如果你这样做,你可能会在使用图表缩放时遇到一些错误,因为要更新图表点,这个api必须再次计算点数,并且当你使用上面的函数时它就会产生。
正如您在serie引用中看到的,更新图表数据时,您必须使用以下函数:
设置新数据: chart.series[0].setData(newData, redraw);
添加一个新点: chart.series[0].addPoint(arrayOfPoints, redraw);

看看这个小提琴 ,这里我手动更新图表系列,没有使用api函数,会发生什么? 没有。

为获得最佳性能,您可以使用以下代码:

  function createChart() { chart = new Highcharts.Chart(options); } // when you want to update it's data $(element).yourEvent(function() { var newData = ['Service Ok', 50.0]; if(chart.hasRendered) { chart.series[0].setData(newData, true); } else { // only use it if your chart isn't rendered options.series[0].data.push(newData); createChart(); } }); $(function() { var options = { colors: ["#66CC00", "#FF0000", "#FF6600"], chart: { renderTo: 'container', plotBackgroundColor: null, plotBorderWidth: null, plotShadow: true }, title: { text: 'Host Status' }, tooltip: { formatter: function() { return '' + this.point.name + ': ' + this.total; } }, plotOptions: { pie: { allowPointSelect: true, cursor: 'pointer', dataLabels: { enabled: true, color: '#000000', connectorColor: '#000000', formatter: function() { return '' + this.point.name + ''; } } } }, series: [{ type: 'pie', name: 'service status', data: ['Service Ok ', 45.0] }] } var chart; $(document).ready(function() { createChart(); }); });​ 

我认为它可能会帮助你JavaScript push()方法规范

和Highcharts控制规范

Series是一个对象数组,所以你应该这样做:

 options.series[0].data.push(["Service Ok", 45.0 ]) 

在这种情况下,你会得到

 series: [{ type: 'pie', name: 'service status', data: [ ["Service Ok", 45.0 ] ] }] 

与饼图的演示

试试这个

 $(function() { var options = { series: [{ type: 'pie', name: 'service status', data: [] }] }; var objData={ "type":'bar','name':'second','data':[]}; options.series.push(objData); });​ 

尝试

 options.series[0]data[0]= 'Service Ok'; options.series[0]data[1]= 45.0;