我一直在使用javascript运行一些使用leaflet.js库的简单代码(在这种情况下,特定的功能是mymap.layerPointToLatLng(),here is the documentation)。
我想使用[[[[x,y]],[[x,y]],...]形式的数据(该格式特别适用于leaflet.js如何处理多边形和多面体,这种格式是我称之为“ dim = 2”)。我需要将其转换为纬度和经度(因此,前面提到的函数)。因为我经常这样做,所以我写了一个函数为我做这件事:



/*-Formatting functions*/
	function coordconvert(mapvar,array,dim){
		var temp1in=[],tempout1=[],temp2out=[];
		if(dim===1){
			for(i=0;i<array.length;i++){
				tempout1[i]=mapvar.layerPointToLatLng(array[i]);
			}
			return tempout1;
		}

		else if(dim===2){
			for(i=0;i<array.length;i++){
				temp1in=array[i];//each polygon
				console.log(i);
				console.log(temp1in);
				console.log(tempout1);
				//tempout1=[];//why do I need this line?
				for(j=0;j<temp1in.length;j++){
					console.log(tempout1);
					var checking = mapvar.layerPointToLatLng(temp1in[j]);
					tempout1[j]=mapvar.layerPointToLatLng(temp1in[j]);//each vertex of polygon
					console.log(j);
					console.log(tempout1);
					console.log(checking);
				}
				temp2out[i]=tempout1;//array of polygons
			}
			return temp2out;
		}
		else{
			console.log("Unable to process coordinate conversion on array");
			return
		}

	}





但是,“ if(dim === 2)”部分似乎无法正常工作,因此所有console.log行都存在。
特别是,如果我取消注释行tempout1[j]=mapvar.layerPointToLatLng(temp1in[j]);的话,赋值//tempout1=[];//why do I need this line?似乎才起作用。

使用console.log,并使用Google Chrome浏览器,我得到以下输出:

First few iterations of loop
Final iteration of the loop

可以看出,最终迭代的值(一个对象)在分配任何内容之前已包含在tempout1数组中(我尝试删除了'if(dim === 1)'部分,并重命名tempout1变量(没有运气),并且被Chrome(?!?!?!!)隐藏该值在循环期间不会被覆盖(如console.log(checking)console.log(tempout1)的比较所示)。

为什么每次嵌套循环运行之前都必须清理变量?为什么最终迭代的值会在任何事情发生之前就进入?

最佳答案

事实证明,解决方案非常简单-我没有正确声明循环变量(即for (var i=o;i<array.length;i++),而不是for (i=o;i<array.length;i++))我不确定这如何解释Google Chrome控制台的行为,但似乎一切之后稳定。

关于javascript - 嵌套嵌套的Java循环数组具有隐藏值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47426011/

10-11 23:15