2011-12-14 144 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);