0

Googleマップから個々のマーカーを削除したい。バージョン3のAPIを使用しています。markerArrayすべてのマーカーを維持し、マップをnullに設定することで、すべてのマーカーを削除する方法を知っています。

一つずつ削除するために、キーと値のペアの組み合わせを考えています。キーを与えて特定のマーカーを削除するようにします。これについては助けが必要です。

以下は、マーカーをドラム化するために使用するコードです。

function geoCodeAddresses(data) {

    var markerInfo = {addressKey: '', marker:''};

    for (var i = 0; i < data.length; i++) {
        myLocation = data[i];

        geocoder.geocode({"address":myLocation}, function (results, status) {

            if (status == google.maps.GeocoderStatus.OK) {
                map.setCenter(results[0].geometry.location);
                var marker = new google.maps.Marker({map:map, position:results[0].geometry.location});
                // checkpoint A
                alert(myLocation);
                /*
                markerInfo.addressKey = myLocation;
                markerInfo.marker = marker;*/

                //mArray.push(markerInfo);
            }
        });

    }
}

マーカーを検索しaddresskeyて削除しますmArray。しかし、ジオコードコールバックメソッドで毎回最後の値を取得します。そして、毎回1​​つのオブジェクトがプッシュされました。var myLocationは、常に配列の最後のインデックスのアドレスを教えてくれます。チェックポイントAで警告した場合。

私のアプローチは正しいですか?

4

1 に答える 1

0

あなたの問題はこの行です:

mArray.push(markerInfo);

それはmarkerInfoの値を配列にプッシュしません。これは、markerInfoへの参照を配列にプッシュします。これで、ループの次の反復で、markerInfoの値を変更すると、配列内の参照が指す値も変更されます。したがって、配列にはすべて同じ値を持つ要素が含まれることになります。

代わりにこれを試してください:

mArray.push({addressKey:myLocation,marker:marker});

それが機能しない場合は、次のようにします。

mArray.push({addressKey:data[i],marker:marker});
于 2011-06-18T22:20:13.023 に答える