我一直在打扰这一段时间,所以我终于崩溃并决定要求输入。
我必须构造一个使用坐标数组来勾画地图的对象。我已经创建了一个数组数组(至少我认为),所以我可以遍历长度并创建所需的许多对象。问题是,我的Array中的值是字符串 - 它们实际上并不是引用数组。然后该对象生气并说它是一个无效的参数。
我尝试使用split(),但似乎没有效果。我手动输入路径:boundary0,这似乎工作得很好。我一直在看这个,我想我已经失去了脑细胞。如果有人甚至可以让我走上正确的道路,那就太棒了。
var arrays = 50; //Set this to how many arrays are created.
var boundariesAr = new Array;
var boundaries = new Array;
for(i=0;i<arrays;){
boundariesAr.push('boundaries' + i);
i++;
};
for(j=0;j<boundariesAr.length;){
var serviceArea = "serviceArea" + j;
var currentArray = boundariesAr[j];
var currentItem = currentArray.split(" ");
serviceArea = new google.maps.Polygon({
path:currentItem,
geodesic:true,
strokeColor:'#000',
strokeOpacity:1.0,
strokeWeight:2,
fillColor: '#FF0000',
fillOpacity: 0.35
});
serviceArea.setMap(map);
j++;
};
编辑 - 更新的代码(仅一个代码段) 这是一个截断的数组外观:
var boundaries0 = [
new google.maps.LatLng(65.307997,-146.130689),
new google.maps.LatLng(65.291840,-146.198712),
];
var boundaries1 = [
new google.maps.LatLng(64.703884,-147.150958),
new google.maps.LatLng(64.703189,-147.155442),
];
var arrays = 50; //boundaries0[],boundaries1[], etc
var boundariesAr = new Array;
for(var i=0;i<arrays;i++){
boundariesAr.push(boundaries);
};
for(var j=0;j<boundariesAr.length;j++){
var serviceArea = "serviceArea" + j;
var currentArray = boundariesAr[j];
var currentItem = currentArray.split(" ");
serviceArea = new google.maps.Polygon({
path:currentItem,
geodesic:true,
strokeColor:'#000',
strokeOpacity:1.0,
strokeWeight:2,
fillColor: '#FF0000',
fillOpacity: 0.35
});
serviceArea.setMap(map);
};
感谢一些精力充沛的人,他们抽出时间来帮忙。如果可以的话,我会给你买饮料。
这最终起作用了 - (我觉得没有将数组嵌套开始就很愚蠢)
var boundaries = [];
boundaries[0] = [
new google.maps.LatLng(65.307997,-146.130689),
new google.maps.LatLng(65.291840,-146.198712),
];
boundaries[1] = [
new google.maps.LatLng(64.703884,-147.150958),
new google.maps.LatLng(64.703189,-147.155442),
];
var arrays = 50; //Set this to how many arrays are created.
for(var j=0;j<arrays;j++){
serviceArea = new google.maps.Polygon({
path:boundaries[j],
geodesic:true,
strokeColor:'#000',
strokeOpacity:1.0,
strokeWeight:2,
fillColor: '#FF0000',
fillOpacity: 0.35
});
serviceArea.setMap(map);
};
答案 0 :(得分:3)
boundariesAr.push('boundaries' + i)
正在推动"boundaries"
的字符串连接以及循环中的i
(您最终会得到50个字符串:{ {1}}到"boundaries0"
)。您应该更改此选项以推送您想要推送的实际"boundaries49"
对象。哦,并确保将迭代变量声明为非全局变量(使用Array
),以便var
不是全局变量 - 这将非常糟糕。
i
在此之后,您似乎想在阵列上运行// V---------------here-------------
for(var i = 0; i < arrays; i++){ // |
boundariesAr.push(boundaries); // |
//i++; /*no need for this, just put it in the for loop - */
};
,这会让您感到悲伤。 split()
用于字符串,因此您可以将字符串拆分为由传递给split()
的任何字符分隔的数组。例如,split()
将创建数组"Hello I am dog".split(" ")
。但是你已经有了一个数组,所以除非你需要对该数组进行字符串操作,否则最好删除这一行。 (现在,无论如何,阵列似乎都是空的。)
另一个问题:您将["Hello", "I", "am", "dog"]
设置为字符串,然后立即使用serviceArea
覆盖它。如果您希望它是多边形,则不应该有理由使用serviceArea = new google.maps.Polygon({...})
对其进行实例化。这样做会很好:var serviceArea = "serviceArea" + j;
答案 1 :(得分:2)
boundariesAr.push('boundaries' + i);
将元素(字符串)推入数组,而不是在第一个数组中放置另一个数组(正如我所想的那样)。
提供10x10阵列的直接示例:
var ary = []; // [] == new Array
for (var i = 0; i < 10; i++){
ary[i] = []; // add a nested array (2D)
for (var j = 0; j < 10; j++){
// add a string within the nested array as an element
ary[i].push('row' + i + ', col' + j);
}
}
// debugging -- http://jsfiddle.net/Gv6kP/
console.log(JSON.stringify(ary));
答案 2 :(得分:2)
您的“更新代码”包含:boundariesAr.push(boundaries);
但据我所知,boundaries
是undefined
?
如果你想要一个数组数组,不应该是这样的:
var boundaries = [
[
new google.maps.LatLng(65.307997,-146.130689),
new google.maps.LatLng(65.291840,-146.198712)
],
[
new google.maps.LatLng(64.703884,-147.150958),
new google.maps.LatLng(64.703189,-147.155442)
]
];
您也可以这种方式创建它(如果您更容易通过索引设置它们):
var boundaries = [];
boundaries[0] = [
'map thing',
'map thing 2'
]
boundaries[1] = [
'more map things',
'more map things 2',
]
这将使你在boundaries[0]
时得到
[
new google.maps.LatLng(65.307997,-146.130689),
new google.maps.LatLng(65.291840,-146.198712)
]
这当然使您能够boundaries[0][0]
。
使用new Array
创建一个新数组似乎很愚蠢。只需使用var myThing = [];
拥有实际多维数组后,您应该可以这样做:
for(var j=0;j<boundaries.length;j++){
for( var b=0; b<boundaries[j].length;b++){
currentItem = boundaries[j][b];
// At this point currentItem is `new google.maps.LatLng(65.307997,-146.130689)`
var serviceArea = new google.maps.Polygon({
path:currentItem,
geodesic:true,
strokeColor:'#000',
strokeOpacity:1.0,
strokeWeight:2,
fillColor: '#FF0000',
fillOpacity: 0.35
});
}
serviceArea.setMap(map); // Where does `map` come from?
}
如果您的边界实际上是一大堆独立的数组boundaries1
,boundaries2
... boundaries50
,那么您需要将它们更改为更少(将它们放入数组中我在这里提到过),或者你不能做你想做的事。当你只将变量的名称作为字符串时,Javascript无法让我知道(而且我已经彻底查看过)从变量中检索值。
基本上,你不能按照"boundaries" + i;
或类似的方式动态调用变量,除非你把它们放到一个合适的数组或对象数据中,否则就没有办法做到这一点结构
答案 3 :(得分:0)
这一行是你的问题:
boundariesAr.push('boundaries' + i);
您正在将字符串推入阵列。要推送数组,只需执行以下操作:
boundariesAr.push([]);
[]
是数组文字的表示法。