Javascript 在IE9中,解析数组的JSON对象会得到不同的结果

Javascript 在IE9中,解析数组的JSON对象会得到不同的结果,javascript,arrays,json,internet-explorer,highcharts,Javascript,Arrays,Json,Internet Explorer,Highcharts,简介 我正在从DataTable创建HighCharts图形。 我要做的是迭代表中的行和列,将字符串(我们使用不同的美国千位分隔符)转换为数字,并将它们保存到名为项的对象中。该对象有两个值item[“name”],这是序列的名称,而item[“data”]是序列的数据。然后,我使用.push方法将这些对象添加到数组中,以发送到Highchartsoptions对象以创建绘图。在下面的例子中,我只有三个系列,但问题总是发生。LineOptions是HighCharts图形的选项对象 代码 函数绘图

简介 我正在从DataTable创建HighCharts图形。 我要做的是迭代表中的行和列,将字符串(我们使用不同的美国千位分隔符)转换为数字,并将它们保存到名为
的对象中。该对象有两个值
item[“name”]
,这是序列的名称,而
item[“data”]
是序列的数据。然后,我使用
.push
方法将这些对象添加到数组中,以发送到Highcharts
options
对象以创建绘图。在下面的例子中,我只有三个系列,但问题总是发生。
LineOptions
是HighCharts图形的选项对象

代码

函数绘图仪ORBAR(类型){
var jsonData=[];
var xaxis=$('#masters_table').find('thead-th:not(:first-child')).map(function(){
返回$(this.html();
}).get();
$('#masters_table tbody tr')。每个(函数(){
项目={};
item[“name”]=$(this.find('td:first child').html();
item[“data”]=$(this.find('td:not(:first child)).map(function(){
返回parseInt($(this.html().replace(/\./g,“”)。replace(“”,0),10);
}).get();
jsonData.push(项目);
});
console.log(jsonData[0][“name”]);//将第0个名称发送到控制台
log(jsonData[1][“name”]);//将第一个名称发送到console
log(jsonData[2][“name”]);//将第二个名称发送到console
LineOptions.series=(jsonData);
LineOptions.xAxis.categories=xAxis;
LineOptions.chart.type=type;
var图表=新的Highcharts.图表(LineOptions);
}
问题 (系列名称应为232023212336)

在Chrome中,生成的console.log为:

2320
2321
2336
每个系列的相应数据都能正确打印出来,一切工作都完美无缺

在IE9中,生成的console.log是:

日志:2336
日志:2336
日志:2336
i、 例如,只有最后一个系列被打印到数组中。结果是三个曲线完全重叠的序列,因为它们具有相同的数据


我一直在寻找答案,但我仍然不知道我做错了什么。不过,我假设我的错误很简单(我希望如此)。

如前面在注释中所写(供将来参考),只需在循环函数中定义
item
变量,而不是使用“全局”变量(
var item={}
而不是
item={}
)。这是因为在IE9中,它似乎是通过引用传递的,因此您推送的是同一个对象,更新了三次(从一次迭代到另一次迭代更改其值)

附言。
顺便说一下,您正在使用的另一个浏览器似乎每次使用
.push
时都会创建一个新变量,我不确定这是“标准”行为。一分到IE9

只是一个值得尝试的检查:在循环中定义“item”,即
var item={}而不是
项={}(如果在其他地方使用,请创建一个新的变量名)。此外,仅作为风格点,您可以简单地使用
item.variable
而不是
item[“variable”]
您亲爱的先生,您是天使!非常感谢。这成功了!我怎么给你一分呢?