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)
,但首先应检查它是否在数组中。