我有一个像这样的数组:
var ret = ["-37.8497", "144.968", "Albert Park Grand Prix Circuit", "2.76083", "101.738", "Sepang International Circuit","26.0325", "50.5106", "Bahrain International Circuit",...]
我希望它是这样的:
var markers = [
{latLng: [45.616944, 9.2825], name: 'Italian Grand Prix'},
{latLng: [52.0732605, -1.0166426], name: 'British Grand Prix'},
{latLng: [43.7345, 7.4214], name: 'Monaco Grand Prix'},
{latLng: [49.332, 8.58], name: 'German Grand Prix'}, ...]
我实现了这个功能:
var j=0;
for (i = 0; i < ret.length; i+=3)
{
markers[j].latLng[0] = ret[i];
markers[j].latLng[1] = ret[i+1];
markers[j].name = ret[i+2];
j++;
}
我收到此错误:
Uncaught TypeError: Cannot read property '0' of undefined
在 for 的第一行。
我用谷歌搜索了一段时间,但似乎 javascript 并没有真正支持多个数组。您能帮助我正确实现吗?
最佳答案
您必须手动创建一个对象。这是一种可能的方法:
var markers = [];
for (var i = 0; i < ret.length; i+=3) {
markers.push({
latLng: [ret[i], ret[i+1]],
name: ret[i+2]
});
}
这里我删除了j
变量,将其替换为push
;这种方式看起来更加简洁易读。
至于错误 - 请注意,JavaScript 中没有自动激活之类的东西。这个表情...
markers[j].latLng[0]
...是这样处理的:
- 首先,JS 尝试查找
markers
变量的值, - 然后它尝试获取该值的名称等于
j
的属性(循环第一步为 0) - 然后它会尝试获取上一步中找到的值的
latLng
属性 - 最后,该值的
0
属性填充为ret[i]
值。
显然,如果这些步骤中的任何一个导致未定义
,则后续尝试查询未定义
的任何属性都会导致错误。
关于Javascript multidim 数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34439200/