2

マップ上にいくつかのカテゴリを表示する必要がある Google マップを使用してアプリを開発しています。ここで、複数のカテゴリからマーカーを追加し、必要に応じて削除できるようにしたいと考えています。

全体を把握することができました。少なくとも、ほとんど... カテゴリのマーカーの削除に問題があります。これを明確にするために、jsfiddle でライブデモを作成しました。だからここに私がこれをやろうとする方法があります:

コード

まず、マップなどを初期化します (ただし、ここでは関係ありません)。次に、マップにマーカーを追加します。

for(i in markers){
    var marker = new google.maps.Marker({
        map: map,
        draggable: false,
        position: new google.maps.LatLng(markers[i].latitude, markers[i].longitude),
        visible: true,
        data: category
    });
    newMarkers.push(marker);
}

ご覧のとおり、オブジェクトに「data: category」があります。これは Google マップ API ではないものですが、エラーは発生せず、マーカーを削除したいときに配列を検索できます。ここで removeMarker 関数:

function removeMarkers(category)
{
    for(i in newMarkers) {
        if(newMarkers[i]['data'] == category){
            count ++;
            newMarkers[i].setMap(null); 
            newMarkers.splice(i, 1);
        }
    }
}

マーカーは削除されますが、すべてではありません...誰かが私の問題を解決していますか?

ライブデモ

前もって感謝します、

ヘレナ S.

4

1 に答える 1

2

問題は、 newMarkers 配列を反復し、同時にそこから要素を削除していることにあるようです。
代わりにこれを試してください。配列内の削除されたマーカー値を null に設定するだけで、ループの後、それらの null 値をフィルタリングします。

    for(i in newMarkers) {
        if(newMarkers[i]['data'] == category){
            count ++ 
            newMarkers[i].setMap(null); 
            newMarkers[i] = null;
        }
    }
    newMarkers = newMarkers.filter(function(val){ return !!val; });

http://jsfiddle.net/GJUcy/

于 2013-04-14T20:36:16.270 に答える