从JavaScript数组中删除任意元素

从JavaScript数组中删除任意元素,javascript,arrays,splice,Javascript,Arrays,Splice,在我的Google Maps应用程序中,我可以在地图上放置标记,并保留对放置的每个标记的引用,以及名为markers的数组中的一些额外信息 添加标记很简单,我只需将新创建的对象推送到数组中(markers.push(marker)) 但是,当从数组中删除任意标记时,给定插槽的索引,它的行为并不像预期的那样。我的职能是: function deleteMarker(markerIndex) { if (markerIndex!='' && markerIndex>=0

在我的Google Maps应用程序中,我可以在地图上放置标记,并保留对放置的每个标记的引用,以及名为
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行为似乎与我的代码没有多大关系。