2011-12-14 7 views
1

, слегка связанный с этим вопросом 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? Причина, по которой я хочу вернуть этот термин (а не поисковый запрос), заключается в том, что это значение необходимо использовать позже.

Я помню, как читал в вышеперечисленном вопросе, что вы можете использовать оператор 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

Да, это может быть проще, но тогда как я могу вернуть только имя? могу ли я просто искать поисковые роботы [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); 
Смежные вопросы