Javascript 当用户在地理围栏外时发出一次警报

Javascript 当用户在地理围栏外时发出一次警报,javascript,jquery,arrays,google-maps,google-maps-api-3,Javascript,Jquery,Arrays,Google Maps,Google Maps Api 3,我有下面的代码检查地图标记是在地理围栏的内部还是外部 我要让它在边界外发出警报 我的问题是地图标记会不断刷新,我不希望警报在一段时间内重复出现 当闹钟响起时,我需要设置一些东西。然后,只有在未设置的情况下才执行警报 当检测到用户返回到边界内时,它也会将其取消设置 if (name === f.contact) { var fence = new google.maps.LatLng(f.lat, f.lng); var dist = google.maps

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

我要让它在边界外发出警报

我的问题是地图标记会不断刷新,我不希望警报在一段时间内重复出现

当闹钟响起时,我需要设置一些东西。然后,只有在未设置的情况下才执行警报

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

    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);
如何检查数组中是否存在该名称


当我回到围栏内时,我该如何从数组中删除名称呢?

如果你最终使用了数组,那么你必须搜索它的每个索引,直到找到像

您还可以考虑,注册事件和事件监听器来处理这个问题,这将是一个更好的设计

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

alertSent["driver1"]=true;,
查找将很简单,在这种情况下,只需使用

alertSent[“驱动程序1”]


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

可以将对象用作关联数组,并将名称用作键,将布尔值用作sent/not sent。如果alertSent[name]根本不包含名称,则其计算结果也将为falsy值

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;
alertSent.indexOf(名称)!=-如果
name
alertSent
中,则1
将返回
true
,否则返回false。要从数组中删除元素,应使用
alertSent.splice(alertSent.indexOf(name),1)
,但首先应检查它是否在数组中。