gpt4 book ai didi

javascript - 循环中的问题设置值

转载 作者:行者123 更新时间:2023-11-30 18:43:43 24 4
gpt4 key购买 nike

我在 js 代码中设置一些值时遇到了一些问题。我试图找出问题所在,但仍然无法在代码中找到问题。

就是我要设置的mostN,mostE,mostW,mostS个值。

代码末尾的警告是“未定义”。为什么?我该如何解决?谢谢!

var mostN,
mostE,
mostW,
mostS;

for (i = 1; i < opts.markers.length; i += 1) //loops 5 times
{
$geocoder.geocode(
{
address: opts.markers[i].address},
function (result, status)
{
if (status === google.maps.GeocoderStatus.OK)
{
var str = [result[0].geometry.location]; // "(42.456465, -48.74116)"
var realString = str.toString();
var stop = realString.length - 1;
var real = realString.substring(1,stop); // "42.456465, -48.74116"

var arr = real.split(", ");

var lat = arr[0].toString(); // "42.456465"
var lng = arr[1].toString(); // "-48.74116"

if(mostN > lat) { mostN = lat; }
if(mostE < lng) { mostE = lng; }
if(mostW > lng) { mostW = lng; }
if(mostS < lat) { mostS = lat; }

alert(mostN); // returns "Undefined"
}
else
{
if (opts.log) {console.log("Geocode was not successful for the following reason: " + status); }
}
}
);

}

最佳答案

您似乎没有考虑经纬度的符号。例如,

> var mostN, 
> ...
> var lat = arr[0].toString(); // "42.456465"

从您的帖子来看,lat 已经是一个字符串,因此将其转换为字符串似乎毫无意义。考虑到后面要进行算术比较,最好先转为数字:

var lat = Number(arr[0]); // 42.456465

var lat = +(arr[0]); // 42.456465

.

>  ...
> if(mostN > lat) { mostN = lat; }
> if(mostE < lng) { mostE = lng; }
> if(mostW > lng) { mostW = lng; }
> if(mostS < lat) { mostS = lat; }

变量 mostN 没有被初始化,所以在比较中它等于零,大于 42.456465,所以测试返回 false,mostN 不是放。但是,mostS 将被设置。

但是比较的符号是错误的——如果纬度是一个更大的 +ve 数字,那么它更偏北:

    if (mostN < lat) { mostN = lat; }

是您想要的,其余测试也是如此。但是,您还必须考虑 -10 比 -20 更靠北的半球,所以(前提是 mostN 和 lat 是数字,而不是字符串):

    if ((mostN + 90) < (lat + 90)) { mostN = lat; }

因为纬度永远不会大于 90 度。对于经度,请使用 180。您可以使用任何您喜欢的数字,即纬度为 90 或更大,经度为 180 或更大,因此您可以对两者都使用 180,但这可能会让维护者感到困惑。

关于javascript - 循环中的问题设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6093601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com