Javascript 如何从本地存储和传单上的图层组中删除特定项目?

Javascript 如何从本地存储和传单上的图层组中删除特定项目?,javascript,local-storage,leaflet,markers,Javascript,Local Storage,Leaflet,Markers,我试图将我在点击传单时创建的标记保存在localstorage上,并使用按钮将其删除。问题是,我不知道如何一次只删除一个标记,并在不影响其他标记的情况下将其从主层中删除 我想为创建的每个标记添加一个唯一的id(这就是为什么“marker#”)然后删除,看看当前标记的id或位置(lat,lng)是否与localstorage上存储的id或位置匹配,然后将其从localstorage中删除并从主层中删除 有人能帮我解决这个问题吗?这让我头疼 我正在使用此函数将它们添加到地图和本地存储中: initU

我试图将我在点击传单时创建的标记保存在localstorage上,并使用按钮将其删除。问题是,我不知道如何一次只删除一个标记,并在不影响其他标记的情况下将其从主层中删除

我想为创建的每个标记添加一个唯一的id(这就是为什么“marker#”)然后删除,看看当前标记的id或位置(lat,lng)是否与localstorage上存储的id或位置匹配,然后将其从localstorage中删除并从主层中删除

有人能帮我解决这个问题吗?这让我头疼

我正在使用此函数将它们添加到地图和本地存储中:

initUserLayerGroup();

map.on('click', onMapClick);

var groupUser;

function initUserLayerGroup() {
    if (localStorage.userMarkers !== undefined) {
        var storageMarkers = [];
        var markersUser = [];

        storageMarkers = JSON.parse(localStorage.userMarkers);

        for (var i = 0; i < storageMarkers.length; i++) {
            var x = storageMarkers[i].coords.x;
            var y = storageMarkers[i].coords.y;
            var name = storageMarkers[i].name;

            var marker = L.marker([y, x]).bindPopup(name + "<br><a href='#' class='delete'>Delete</a>");

            marker.on("popupopen", onPopupOpen);

            markersUser.push(marker);
        }

        groupUser = L.layerGroup(markersUser);

        map.addLayer(groupUser);
    }
}

function onMapClick(e) {
    var storageMarkers = [];
    var markersUser = [];

    if (localStorage.userMarkers !== undefined) {
        storageMarkers = JSON.parse(localStorage.userMarkers);
    }

    storageMarkers.push({
        "coords": {
            "x": e.latlng.lng,
            "y": e.latlng.lat
        },
        "name": "Marker #"
    });

    var x = storageMarkers[storageMarkers.length -1].coords.x;
    var y = storageMarkers[storageMarkers.length -1].coords.y;
    var name = storageMarkers[storageMarkers.length -1].name;

    var marker = L.marker([y, x]).bindPopup(name + "<br>X: "+ x +", Y: "+ y +"<br><a href='#' class='delete'>Delete</a>");

    marker.on("popupopen", onPopupOpen);

    markersUser.push(marker);

    groupUser = L.layerGroup(markersUser);

    map.addLayer(groupUser);

    localStorage.userMarkers = JSON.stringify(storageMarkers);
}

function onPopupOpen() {
    var tempMarker = this.getLatLng();

    $('.delete').click(function() {
        localStorage.removeItem('userMarkers');
        map.removeLayer(groupUser);
    });
}
initUserLayerGroup();
map.on('click',onmaclick);
var-groupUser;
函数initUserLayerGroup(){
if(localStorage.userMarkers!==未定义){
var-storageMarkers=[];
var markersUser=[];
storageMarkers=JSON.parse(localStorage.userMarkers);
对于(var i=0;i”);
marker.on(“popupopen”,onPopupOpen);
markersUser.push(标记器);
}
groupUser=L.layerGroup(markersUser);
map.addLayer(groupUser);
}
}
函数onMapClick(e){
var-storageMarkers=[];
var markersUser=[];
if(localStorage.userMarkers!==未定义){
storageMarkers=JSON.parse(localStorage.userMarkers);
}
推({
“coords”:{
“x”:e.latlng.lng,
“y”:e.latlng.lat
},
“名称”:“标记#”
});
var x=storageMarkers[storageMarkers.length-1].coords.x;
var y=storageMarkers[storageMarkers.length-1].coords.y;
var name=storageMarkers[storageMarkers.length-1].name;
var marker=L.marker([y,x]).bindpoop(名称+”
x:“+x+”,y:“+y+”
”; marker.on(“popupopen”,onPopupOpen); markersUser.push(标记器); groupUser=L.layerGroup(markersUser); map.addLayer(groupUser); localStorage.userMarkers=JSON.stringify(storageMarkers); } 函数onPopupOpen(){ var tempMarker=this.getLatLng(); $('.delete')。单击(函数(){ localStorage.removietem('userMarkers'); map.removeLayer(groupUser); }); }
您可以看到它在这里工作:


一种方法是在单击标记时,在
localStorage
中迭代保存的坐标数组,并将其与单击的标记的坐标进行比较。一旦它们相同,从
localSotrage
中删除此项目并进行更新

function onPopupOpen() {
  var _this = this;
  var clickedMarkerCoords = this.getLatLng();

  $('.delete').click(function() {
    storageMarkers = JSON.parse(localStorage.userMarkers);
    for(i = storageMarkers.length; i > 0; i--) {
      if (typeof storageMarkers[i] != 'undefined' && 
        (clickedMarkerCoords.lat == storageMarkers[i].coords.y &&
        clickedMarkerCoords.lng == storageMarkers[i].coords.x)
      ) {
        storageMarkers.splice(i, 1);
        localStorage.userMarkers = JSON.stringify(storageMarkers);
      }
    }   
    map.removeLayer(_this);
  });
}

这是我要找的东西:

非常感谢拉扎雷夫·亚历山大,这正是我要找的。一种迭代保存的数组并比较它们的方法!你真棒!