2011-12-14 29 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

+0

編集のおかげで、ジェイソン。あまりにもNode.js(それは暗黙のうちに)に使用されて、私は推測します。 –

+0

これはうまくいきました。これはありがとう! – zik

0

それはあなたが値を使用して、より快適になり、キーを使用している可能性があります。オブジェクトの配列を使用することを検討してください:

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

これは簡単かもしれませんが、どうすれば名前だけを返すことができますか?私はちょうどsearchProviders [0、名前];を行うことはできますか? – zik

+0

searchProviders [0] .name – graphicdivine

+0

ありがとうございます。 – zik

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); 
関連する問題