Доступ к имени свойства объекта - PullRequest
1 голос
/ 14 декабря 2011

немного относится к этому вопросу здесь .

Моя проблема:

Я пишу небольшой скрипт, который будет читать 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 ]

3 голосов
/ 14 декабря 2011

Вы должны иметь возможность повторять, как это:

for (var key in searchProviders) {
    if(!searchProviders.hasOwnProperty(key)) { continue; }
    var URL = searchProviders[key];
    if (document.referrer === URL) {
      return key;
    }
}
1 голос
/ 14 декабря 2011

В одну сторону;

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);
0 голосов
/ 14 декабря 2011

Возможно, вы используете ключи там, где вам будет удобнее использовать значения.рассмотрите возможность использования массива объектов:

var searchProviders = [{
    name: "google",
    url: "google.com"
    },{
    name:"bing",
    url: "bing.com"}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...