2011-12-14 140 views
1

与此问题稍有关系here访问对象的属性名称

我的问题:

我写一个脚本位的,将阅读页面的引用URL,并检查它从何而来,即谷歌,必应等。现在我知道我可以做一个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?我希望返回此术语(而不是搜索术语)的原因是因为此值需要稍后使用。

我记得在上面发布的问题中阅读,你只能使用foreach语句遍历一个对象 - 有没有另外一种方法来做到这一点?当然,如果我可以使用foreach语句,但是我希望语句在发现正确的值时中断(因此我为什么要使用if)。

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

回答

3

你应该能够重复这样的:

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

谢谢 - 会给这个去。我不知道你可以使用这样的for循环。每天都是学生! :) – zik 2011-12-14 12:41:02

+0

感谢您的编辑,杰森。太过习惯Node.js(隐含地这样做),我想。 – 2011-12-14 14:23:08

0

这有可能是你使用的键,您会使用值更舒服。考虑使用一组物体:

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

单程;

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);