如何在Javascript或Jquery中关联两个值?

时间:2014-10-08 18:32:23

标签: javascript jquery arrays underscore.js

这似乎应该很容易做到,但我找不到任何可行的解决方案。基本思想是使用一个包含与url相关的代码的数组,并根据哪个url被解析为referrer,将代码插入localStorage。

var site = {
“example1.com” : "x10",
“example2.com” : "x11",
“example3.com” : "x12"
}

if (document.referrer.indexOf(sitevalue) != -1) {    

   if (localStorage) { 
   localStorage.setItem("code",sitekey);
}
}

因此,如果引用者是example1.com,那么localStorage中设置的代码将为“x10”,依此类推。我已经阅读过有关可能使用Underscore.js _Invert方法的内容,但我认为我必须找到一个更为明显的解决方案。

3 个答案:

答案 0 :(得分:2)

这效率稍低,因为它在找到匹配后继续处理,但代码非常简单:

Object.keys(site).forEach(function(key) {
    if (document.referrer.indexOf(key) > -1) {
        if (localStorage) { 
            localStorage.setItem("code", site[key]);
        }
    }
});

更新:刚刚注意到了Underscore标记。使用Underscore,我可能会稍微更改循环,而是执行此操作:

_.forEach(_.pairs(site), function(pair) {
    if (document.referrer.indexOf(pair[0]) > -1) {
        if (localStorage) { 
            localStorage.setItem("code", pair[1]);
        }
    }
});

唯一明显的优势是,这可能适用于不支持Object.keysArray.prototype.forEach的旧环境。

答案 1 :(得分:1)

如果您想获得"x10",可以通过site["example1.com"]等获取

我确定您的具体要求,但这可以解决我的理解:

var site = {
    "example1.com" : "x10",
    "example2.com" : "x11",
    "example3.com" : "x12"
}

if (document.referrer.indexOf(sitevalue) != -1) {    
    if (localStorage) {
        var url = document.referrer.replace('www.','')
        var host = url.match(/:\/\/(.[^/]+)/)[1];
        localStorage.setItem("code", site[host]);
    }
}

请注意,我添加了一些代码,以删除可能的前导www.以及通过正则表达式从提供的网址中删除主机名。

答案 2 :(得分:1)

如果你想利用Underscore.js,下面的独立工作示例说明了如何遍历site对象中的键,如果一个匹配referer字符串,则将其相应的代码存储在localStorage中。 / p>

<script src="http://underscorejs.org/underscore-min.js"></script>

<script>

    // this variable is just for testing
    var myReferer = "http://example2.com";

    var site = {
        "example1.com": "x10",
        "example2.com": "x11",
        "example3.com": "x12"
    };

    if (localStorage) {
        _.each(site, function (value, key) {
            // you'd replace "myReferer" with "document.referrer" here
            if (myReferer.indexOf(key) !== -1) {
                localStorage.setItem("code", value);
            }
        });
    }

    // this is also just for testing
    alert(localStorage["code"]);
</script>