【问题标题】:JavaScript : How to match string and var?JavaScript:如何匹配字符串和变量?
【发布时间】:2014-06-22 21:59:12
【问题描述】:

我需要你的帮助,

我希望在activeLayers = [bus,stops,slot1] 而不是activeLayers = ["bus","stops","slot1"] 我该如何管理这个?换句话说,我想将字符串“转换”为对象,它应该引用。

很遗憾,这里不起作用,更多代码可能会有所帮助

window.onload = function () {
                var validLayers = {
                    slot1 : new L.LayerGroup(),
                    places : new L.LayerGroup(),
                    stops : new L.LayerGroup()
                    };
                    var platz = L.MakiMarkers.icon({icon: "embassy", color: "#f00", size: "l"});
                    var extern = L.MakiMarkers.icon({icon: "college", color: "#FF9900", size: "l"});


                        // Wichtige Plätze
                        L.marker([49.99264845,8.24160625696918], {icon: platz}).bindPopup('Wiese vor dem ZDV').addTo(validLayers.places);
                        L.marker([49.99454,8.24384], {icon: platz}).bindPopup('Rote Infobox').addTo(validLayers.places);
                        L.marker([49.99182355,8.23384953468164],{icon:platz}).bindPopup('Zentralmensa').addTo(validLayers.places);
// Get url parameters
var params = {};
window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {
    params[key] = value;
});


if( params.layers) {
    var activeLayers = (function(arr) {
        var l = arr.length, i, ret = {};
        for( i=0; i<l; i++) ret[i] = validLayers[arr[i]];
        return ret;
    })(params.layers.split(","));
}

// Create map
var map = new L.Map('map', {
    center: [params.lat || 49.99238, params.lng || 8.23779],
    minZoom: 12,
    maxZoom: 18,
    zoom: params.zoom || 15,
    layers: activeLayers || [validLayers.places, validLayers.stops ,validLayers.slot1]
});



                var baseLayers = {
                };

                var overlays = {
                    "Sonstiges": validLayers.places,
                    "Bus": validLayers.stops,
                    "Slot 1": validLayers.slot1,
                    "Slot 2": validLayers.slot2,
                    "Slot 3": validLayers.slot3,
                    "Slot 4": validLayers.slot4
                };



                L.control.layers(baseLayers, overlays).addTo(map);

                L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
                    attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
                }).addTo(map);
}

这是我用来显示网站的网址

campusmap.html?lat=49.99684&lng=8.24811&zoom=18&layers=places,bus,slot1

【问题讨论】:

    标签: javascript string var


    【解决方案1】:

    如果我正确理解您的问题,您希望能够在查询字符串中引用某些变量吗?如果是这样,请考虑尝试以下操作:

    var validLayers = {
        slot1: new L.LayerGroup(),
        places: new L.LayerGroup(),
        stops: new L.LayerGroup()
    };
    
    // get url parameters
    // ...
    
    if( params.layers) {
        var activeLayers = params.layers.split(",").map(function(key) {
            return validLayers[key];
        });
    }
    

    这里,validLayers 被用作白名单,因此只有您允许的内容才能被引用。

    【讨论】:

    • +1,但是 IEFE 对新手来说有点混乱。您可能想省略它。
    • @Bergi 可能,是的。我用它来避免污染li 变量...通常我只会做.map 但浏览器兼容性...
    • 说真的,螺丝浏览器兼容性......任何不支持 ES 5 的东西都不应被视为浏览器:D
    • 哈哈!真的!但遗憾的是,有些移动设备有奇怪的兼容性表……例如,Nintendo 3DS 浏览器不支持box-shadow,但它支持transition 进行3D 转换!
    • @Bergi 还有那些花哨的内网应用容器(我想他们有这个蓝色的e)你有时需要注意;)
    猜你喜欢
    • 2020-04-06
    • 2011-03-11
    • 2021-09-22
    • 2011-10-23
    • 2021-06-11
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多