Javascript 通过选项值查找标记

Javascript 通过选项值查找标记,javascript,leaflet,Javascript,Leaflet,假设您有一个带有一组自定义标记的传单地图,每个标记都有一个唯一的id值: var marker = new L.marker(latlong, {id: id, icon: icon}).addTo(map); 访问标记的推荐方法是什么?具体来说,我想通过标记的“id”值修改标记的类?迭代所有地图的图层,检查它是否是标记,并比较id: L.Map.include({ getMarkerById: function (id) { var marker = null;

假设您有一个带有一组自定义标记的传单地图,每个标记都有一个唯一的id值:

var marker = new L.marker(latlong, {id: id, icon: icon}).addTo(map);

访问标记的推荐方法是什么?具体来说,我想通过标记的“id”值修改标记的类?

迭代所有地图的图层,检查它是否是标记,并比较id:

L.Map.include({
    getMarkerById: function (id) {
        var marker = null;
        this.eachLayer(function (layer) {
            if (layer instanceof L.Marker) {
                if (layer.options.id === id) {
                    marker = layer;
                }
            }
        });
        return marker;
    }
});

var map = new L.Map(...);

var marker = new L.Marker(..., {id: 1});

map.getMarkerById(1); // returns marker instance
map.getMarkerById(2); // returns null

迭代地图的所有图层,检查其是否为标记,并比较id:

L.Map.include({
    getMarkerById: function (id) {
        var marker = null;
        this.eachLayer(function (layer) {
            if (layer instanceof L.Marker) {
                if (layer.options.id === id) {
                    marker = layer;
                }
            }
        });
        return marker;
    }
});

var map = new L.Map(...);

var marker = new L.Marker(..., {id: 1});

map.getMarkerById(1); // returns marker instance
map.getMarkerById(2); // returns null

我建议保留一组标记,使用它们的ID作为键,而不是循环遍历所有标记,例如:

var markers = {};

markers[id] = new L.marker(latlong, {id: id, icon: icon}).addTo(map);
然后您只需引用marker[id]

一个更复杂的例子:

var markers = {};
var data = [ ['alpha', 0, -80],
             ['beta',  20, 35],
             ['delta', -70, 44],
           ];

data.forEach(function(item){
    var id = item[0];
    var latLng = L.latLng(item[1], item[2]);
    markers[id] = new L.marker(latLng, {id: id, icon: icon}).addTo(map);
});

console.log(markers['delta']); // returns the marker at -70, 44

我建议保留一组标记,使用它们的ID作为键,而不是循环遍历所有标记,例如:

var markers = {};

markers[id] = new L.marker(latlong, {id: id, icon: icon}).addTo(map);
然后您只需引用marker[id]

一个更复杂的例子:

var markers = {};
var data = [ ['alpha', 0, -80],
             ['beta',  20, 35],
             ['delta', -70, 44],
           ];

data.forEach(function(item){
    var id = item[0];
    var latLng = L.latLng(item[1], item[2]);
    markers[id] = new L.marker(latLng, {id: id, icon: icon}).addTo(map);
});

console.log(markers['delta']); // returns the marker at -70, 44

我认为再写一篇短文就是废话。用你已经拥有的东西工作。但我明白你的意思。有点取决于用例tho。当然,我们不知道OP程序的架构。但我不认为这是另一条记录,这是这里唯一的记录。我认为保留另一条记录是废话。用你已经拥有的东西工作。但我明白你的意思。有点取决于用例tho。当然,我们不知道OP程序的架构。但我不认为这是另一条格言,如果layer.options.uniqueID===id对我有效,而不是headif layer.options.uniqueID===id对我有效,则说明:您可以/应该可能在最新版本的传单中对此进行了修改使用uniqueID代替