我有一个这样的数组:
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。的第一行。
我用Google搜索了一段时间,但似乎javascript并没有真正支持多个数组。你能帮我正确实施吗?
答案 0 :(得分:1)
您必须手动创建对象。这是一种可行的方法:
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]
...以这种方式处理:
markers
变量的值,j
(循环的第一步为0)latLng
属性0
属性填充了ret[i]
值。显然,如果这些步骤中的任何一个导致undefined
,则后续尝试查询undefined
的任何属性都会导致错误。
答案 1 :(得分:0)
您需要进行两项小改动:
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"],
markers = [],
i, j = 0;
for (i = 0; i < ret.length; i += 3) {
markers[j] = {}; // add this for a new object
markers[j].latLng = []; // add this for a new array
markers[j].latLng[0] = ret[i];
markers[j].latLng[1] = ret[i + 1];
markers[j].name = ret[i + 2];
j++;
}
document.write('<pre>' + JSON.stringify(markers, 0, 4) + '</pre>');
&#13;
或者在一行中:
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"],
markers = [],
i;
for (i = 0; i < ret.length; i += 3) {
markers.push({ latLng: [ret[i], ret[i + 1]], name: ret[i + 2] });
}
document.write('<pre>' + JSON.stringify(markers, 0, 4) + '</pre>');
&#13;