如何定位此数组中的索引?

时间:2018-10-03 21:24:40

标签: javascript leaflet

我正在尝试向地图添加重命名和删除功能,但是到目前为止,我一直无法定位markers数组中的单个值。我尝试使用markers.indexOf(marker),如下所示:

L.DomEvent.on(deleteBtn, 'click', function(ev) {
        var index =  markers.indexOf(marker);
          console.log(marker.indexOf(index));
           console.log('Delete button clicked!');
        }, this);
        });

执行此操作时,我会在控制台中获得地图上的所有标记。当我使用array.find方法时,我返回false指示该值不存在,但每个标记都是存储在本地存储中的一个对象,目的是能够检索markers数组成员的索引以从本地存储中获取值以根据需要进行更改。

 // Creates the custom markers added by the user and stores them to localStorage
    var markers = [];
    var customLayer = new L.layerGroup();
    myMap.on('contextmenu', function(e) {
          var marker = L.marker(e.latlng,
          {icon : flagIcon}).addTo(customLayer).addTo(myMap);
          marker.bindTooltip("<b>Custom</b>", {permanent: true, offset: [0, 0],direction: "bottom"});
          customLayer.addTo(myMap);
          markers.push({ coords: e.latlng, name: "<b>Custom</b>" });

          marker.on('click', function(e) {

            renameDeleteChoice(e);
            L.DomEvent.on(renameBtn, 'click', function(ev) {

                console.log('Rename button clicked!');
            }, this);

            L.DomEvent.on(deleteBtn, 'click', function(ev) {
           // I have been trying code here
               console.log('Delete button clicked!');
            }, this);
            });

    // Save marker Coords to localStorage

          markers.forEach(function() {
            window.localStorage.setItem('customData', JSON.stringify(markers));

       });
    });

我刚才设置错了吗?我推送新值的数组是否应该具有这种行为? 如果有人需要,这里是传单的文档。我很乐意回答任何问题以求澄清。

https://leafletjs.com/reference-1.3.4.html

预先感谢您提供的任何指导。

1 个答案:

答案 0 :(得分:0)

您可以向自定义对象中也引用的标记变量添加唯一的ID,然后根据该标识找到项目。如果latlng的值是唯一的,则可以执行以下操作:

myMap.on('contextmenu', function(e) {
    var marker = ...;
    marker.id = e.latlng; 
    markers.push({ coords: e.latlng, name: "<b>Custom</b>" });

    marker.on('click', function(e) {
        L.DomEvent.on(deleteBtn, 'click', function(ev) {
            var markerId = marker.id;
            var markerItem = markers.find(function(m) {
                return m.coords === markerId;
            });
            // update markerItem in some way
            // alternatively, use findIndex if you really just want the index
        }, this);
    });
 });