【问题标题】:Accessing a property name of an object访问对象的属性名称
【发布时间】:2012-01-20 05:16:53
【问题描述】:

与这个问题有点相关here

我的问题:

我正在编写一些脚本,它将读取页面的引用 URL 并检查它的来源,即 Google、Bing 等。现在我知道我可以做一个 document.referrer.search('google'); 但我不想要这样做是因为从数组或对象中读取值是有意义的。我创建了一个对象,其中包含我正在搜索的术语和属性名称,如下所示:

var searchProviders = {
  "google": "google.com",
  "bing": "bing.com",
  "msn": "search.msn",
  "yahoo": "yahoo.co",
  "mywebsearch": "mywebsearch.com",
  "aol": "search.aol.co",
  "baidu": "baidu.co",
  "yandex": "yandex.com"
};

现在,我想知道的是我可以遍历这个对象并执行document.referrer.search(searchProviders[0]),然后返回属性名称吗?例如,如果它包含google.com,我希望它返回google?我希望返回这个词(而不是搜索词)的原因是因为这个值需要稍后使用。

我记得在上面发布的问题中读到,您只能使用 foreachstatement 来遍历对象 - 我还有其他方法吗?当然,如果我可以使用 foreach 语句,但如果它找到正确的值,我希望语句中断(因此我要使用 if)。

所以我有点不知道什么是最好的方法。任何帮助将不胜感激,希望我已经很好地解释了一切 - 如果没有,请告诉我,我会更新我的问题。

【问题讨论】:

    标签: javascript object loops


    【解决方案1】:

    你应该能够像这样迭代:

    for (var key in searchProviders) {
        if(!searchProviders.hasOwnProperty(key)) { continue; }
        var URL = searchProviders[key];
        if (document.referrer === URL) {
          return key;
        }
    }
    

    【讨论】:

    • 谢谢 - 试试看。我不知道你可以使用这样的 for 循环。每天都是学生日! :)
    • 感谢您的编辑,杰森。太习惯了 Node.js(隐含地这样做),我猜。
    【解决方案2】:

    您可能正在使用更适合使用值的键。考虑使用对象数组:

    var searchProviders = [{
        name: "google",
        url: "google.com"
        },{
        name:"bing",
        url: "bing.com"}];
    

    【讨论】:

    • 是的,这可能更容易,但是我怎样才能只返回名称呢?我可以只做 searchProviders[0, name]; 吗?
    【解决方案3】:

    一种方式;

    var SearchProviders = {
        Tags : {
            "google":"google.com",
            "bing":"bing.com",
            "msn":"search.msn",
            "yahoo":"yahoo.co",
            "mywebsearch":"mywebsearch.com",
            "aol":"search.aol.co",
            "baidu":"baidu.co",
            "yandex":"yandex.com"
        },
        lookup : function(tag, fuzzy) {
            tag = tag.toLowerCase();
            for (var k in this.Tags) {
                if (this.Tags[k] === tag || (fuzzy && tag.indexOf(this.Tags[k]) >= 0))
                    return k;
            }
            return null;
        }
    };
    
    var name = SearchProviders.lookup("google.com")
    name && alert(name);
    
    var name = SearchProviders.lookup("blah.google.com", true)
    name && alert(name);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      • 2013-11-21
      • 2015-09-22
      • 1970-01-01
      相关资源
      最近更新 更多