从JavaScript数组中删除任意元素
在我的Google Maps应用程序中,我可以在地图上放置标记,并保留对放置的每个标记的引用,以及名为从JavaScript数组中删除任意元素,javascript,arrays,splice,Javascript,Arrays,Splice,在我的Google Maps应用程序中,我可以在地图上放置标记,并保留对放置的每个标记的引用,以及名为markers的数组中的一些额外信息 添加标记很简单,我只需将新创建的对象推送到数组中(markers.push(marker)) 但是,当从数组中删除任意标记时,给定插槽的索引,它的行为并不像预期的那样。我的职能是: function deleteMarker(markerIndex) { if (markerIndex!='' && markerIndex>=0
markers
的数组中的一些额外信息
添加标记很简单,我只需将新创建的对象推送到数组中(markers.push(marker)
)
但是,当从数组中删除任意标记时,给定插槽的索引,它的行为并不像预期的那样。我的职能是:
function deleteMarker(markerIndex) {
if (markerIndex!='' && markerIndex>=0 && markerIndex<markers.length) {
if (confirm('Do you really want to remove this marker from the map?')) {
alert('deleting marker '+markerIndex); //debugging purposes
markers.splice (markerIndex, 1);
}
}
}
函数deleteMarker(markerIndex){
如果(markerIndex!=''&&markerIndex>=0&&markerIndex您的代码的一个问题是JavaScript将0==''
解释为true,因此对于markerIndex
为零的情况,您的确认代码不会被执行。我猜您误解了Firebug显示的步骤,或者它只是有缺陷,因为您的if条件实际上会进行评估对于markerIndex为0的情况,e为false
通过添加额外的=
,可以使用类型严格比较:
if (markerIndex !== '' && ...) {
更简单的方法是:
if (markers[markerIndex] !== undefined) {
因为JavaScript在访问未定义的对象成员时不会引发错误
splice()
不工作的另一个问题很奇怪(它应该可以工作)。不确定这里是否发生了这种情况。但我看到firebug在调试时与未调试时运行的代码不同。我很确定我也没有手表干扰代码
function deleteMarker(markerIndex) {
if (markers[markerIndex] !== undefined) {
if (confirm('Do you really want to remove this marker from the map?')) {
map.removeOverlay(markers[markerIndex]);
markers.splice (markerIndex, 1);
}
}
}
这似乎解决了所有的问题。谢谢你的回答,非常感谢。
我特别喜欢将第一个if条件简化为:
if(标记[markerIndex]!==未定义)
splice()
似乎直接在阵列上运行(与NuclearDog暗示的相反),它按预期工作。我最亲爱的Firebug误导了我。非常感谢您的帮助。这应该可以解决0索引问题:)我一直在尝试splice()函数。似乎可以工作,但结果很奇怪……我认为我的思路是正确的,我会自己解决。只是对Firebug显示的内容感到困惑……不能太相信:)回应:“你的另一个splice()不工作的问题很奇怪(应该可以工作)。”是的,你是对的。确实如此:$你是对的。Firebug是最有用的小插件之一,但有时也会让我非常恼火。奇怪的Firebug行为似乎与我的代码没有多大关系。