我运行以下代码。它从JSON提要中加载一组数据。 Feed包含一个具有单个数组的对象。此数组包含的对象每个都有一些描述员工的值。
var salesByEmployee = [];
var profitByEmployee = [];
$.getJSON("some-json-feed-url", function(data) {
$.each(data.items, function(i, item) {
salesByEmployee.push({
label: item.name, y: item.sales
});
profitByEmployee.push({
label: item.name, y: item.profit
});
// |--Works--| |------------Doesn't work: undefined-----------|
alert(item.name+" "+salesByEmployee[salesByEmployee.length-1].name);
});
});
//alert(salesByEmployee[0].name); // Produces errors!
alert(salesByEmployee.length); // Spits out "0".
运行之后,我尝试打印typeof(salesByEmployee)
,这将返回undefined。奇怪的是,当我尝试打印数组的大小时,它打印30(这是正确的大小)。我确定$.each
循环正在发生,并且JSON Feed中的值有效。
到目前为止我尝试过的事情:
将item.name
替换为item.name + ""
,将其替换为其他值,但添加零,因为它们是数字。我假设可能发生的是,在我创建了将对象推入数组之后,不知何故,值被抛出。我想我可以创建值的深层副本来解决这个问题,但显然情况并非如此。
在上一次尝试之后,在保留+""
和+0
的同时,如果我删除除循环之后的所有警报alert(salesByEmployee.length);
,那么< strong>一切正常,但长度返回为0!然后,奇怪的是,如果我删除最后一个警报,它会中断!我傻眼了。
我想不出任何方向去解决这个问题,因为JS不是我经常使用的东西。这种行为对我来说似乎很奇怪。有什么建议吗?
编辑:为了提供更多的上下文,这是我运行的第一件事,在这段代码之后,我使用CanvasJS中的数据来制作条形图。