2011-12-14 5 views
1

약간이 질문과 관련된 here.개체의 속성 이름에 액세스

내 문제 :

나는 그것이 지금은 난 그냥 document.referrer.search('google');을 수행 할 수 있습니다 알고 즉 구글, 빙 등 어디에서 오는지 볼 수있는 페이지의 참조 URL을 읽고 확인합니다 스크립트의 비트를 쓰고 있어요 하지만 배열이나 객체에서 값을 읽는 것이 이치에 맞지 않기를 바랄뿐입니다. 나는 다음과 같이 내가 검색하고있는 용어와 속성 이름을 가진 개체 만든 :이 객체를 통해 반복 할 수

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.comgoogle을 돌려주고 싶습니까? 이 값을 나중에 사용해야하기 때문에 검색어를 반환하지 않고 검색어를 반환해야하는 이유가 있습니다.

위의 질문에서 객체를 반복 할 때 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 루프를 사용할 수 있는지 몰랐다. 매일 매일 schoolday입니다! :) – zik

+0

편집 해 주셔서 고맙습니다, 제이슨. 너무나 Node.js (암시 적으로 그렇게 사용)에 익숙해졌습니다. –

+0

좋아,이게 효과가 있다고 생각해. - 고마워! – zik

0

그것은 당신이 값을 사용하여 더 편안 할 것입니다 키를 사용하고있는 가능성이 있습니다. 객체 배열 사용을 고려하십시오.

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

예,이 방법이 더 쉬울 수도 있지만 이름을 어떻게 반환 할 수 있습니까? searchProviders [0, name];을 할 수 있습니까? – 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);