0

我有下面的代码检查地图标记是在地理围栏内部还是外部。

我将使其警报检测到超出范围。

我的问题是地图标记不断刷新,我不希望警报重复一遍。

闹钟响起时我需要设置一些东西。然后仅在该事物未设置时才发出警报。

当检测到用户回到边界内时,它也会取消设置。

    if (name === f.contact) {
        var fence = new google.maps.LatLng(f.lat, f.lng);
        var dist = google.maps.geometry.spherical.computeDistanceBetween(posi, fence);
        // check if in/out of fence
        if (dist > f.radius) {
            console.log(f.contact+" : "+dist+" meters - outside the fence");
            // OMG outside the fence play an alarm
        } else {
            console.log(f.contact+" : "+dist+" meters - inside the fence");
            // Back inside the fence, reset the alarm
        }
    }

我在想可能做一个这样的数组

var alertSent = [];

然后如果在地理围栏之外添加用户名

alertSent.push(name);

我将如何检查名称是否存在于数组中?

回到栅栏内时,我将如何从数组中删除名称?

4

2 回答 2

1

如果您最终使用数组,那么您将搜索每个索引,直到找到类似的字符串

如何检查数组是否包含 JavaScript 中的对象?查找项目是否在 JavaScript 数组中的最佳方法?

你也可以想一想,注册事件和事件监听器来处理这个问题,会是一个更好的设计。

或者您也可以使用 hashmap 类型的 javascript 实现,例如使用

alertSent["driver1"]=true;,

在这种情况下,查找将很简单,只需使用 ,

alertSent["driver1"]

获取布尔值。但在这种情况下要注意数组空间。

于 2012-10-12T15:05:02.070 回答
1

您可以将对象用作关联数组,并将名称用作键,并将布尔值用作已发送/未发送。如果它根本不包含 name,alertSent[name] 也会评估为假值。

var alertSent = {};

// if user outside: check
if (!alertSent[name]) {
    // show alert
    // remember that alert was shown
    alertSent[name] = true;
}

// remove name from alertSent:

alertSent[name] = false;
于 2012-10-12T15:05:42.273 回答