循环中的问题设置值

时间:2011-05-23 06:29:21

标签: javascript google-maps

我在js-code中设置了一些值的问题。我试图弄清楚问题是什么,但仍然无法在代码中找到问题。

这是我想要设置的最多,最多,最多,最多的S值。

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

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); }
        }
    }
);

}

4 个答案:

答案 0 :(得分:1)

尝试类似:

var SOMETHING_HUGE = 100000000;
var mostN = -SOMETHING_HUGE,
mostE = -SOMETHING_HUGE,
mostW = SOMETHING_HUGE,
mostS = SOMETHING_HUGE;

//...

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

答案 1 :(得分:1)

您似乎没有考虑到lat和long的符号。例如,

> 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更偏北的半球,所以(假设大多数N和纬度是数字,而不是字符串):

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

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

答案 2 :(得分:0)

应该按原样运行,因为在检查变量mostN时,未定义,条件mostN > lat为false。

答案 3 :(得分:0)

你的大多数N没有明确地用一些值初始化。试着在

中放置警报

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

条件。并检查比较是否正确。