Вопрос по if-statement, javascript – Альтернатива миллиону заявлений IF

8

Используя JavaScript, я вытаскиваю имена из веб-страницы и как-то связываю их вместе (вероятно, используя массив). После того как я соберу все имена вместе, мне нужно создать еще одну строку, в которой будут указаны все адреса электронной почты этих имен. Адреса электронной почты не указаны на веб-странице, поэтому мне придется каким-то образом перечислять все возможные thisName = thisEmail в моем скрипте. Я собирался подойти к этому, сделав несколько миллиардов заявлений, но я подумал, что должен быть более эффективный способ. Какие-либо предложения?

<code>var x = getElementById("names");
var name = x.InnerHTML;
var email;
if (name == 'Steve'){ email == '[email protected]'; }
if (name == 'Bob'){ email == '[email protected]'; }
....
</code>
Возможно, база данных какой-то? vcsjones
На основании предоставленного вами ограниченного примераemail кажется просто строчная версия названия с@gmail.com, добавлено до конца. Если это так, вам не нужна какая-либо структура управления. Anthony Grist
заявление переключателя с миллионом случаев ... T I
@AnthonyGrist Извините, я привел плохой пример. Письма более случайны, чем просто имя@gmail.com Jonathan Eckman

Ваш Ответ

3   ответа
1

Вы можете хранить все адреса электронной почты в ассоциативном массиве, как

псевдокод

var emailsList = ["steve" => "[email protected]", "bob" => "[email protected]"];
then email = emailsList[name]; will solve your problem
Я написал это как псевдокод
только то, что это не «ассоциативный массив» javascript.
1

Вы можете создать объект заранее:

var name_email_map = {
 "Steve": "[email protected]",
 "Bob": "[email protected]",
 "John": "[email protected]"
}

Это было бы легко вывести из некоторого серверного языка с библиотекой JSON для любого языка, который вы используете. Ниже приведен список библиотек JSON:http://www.json.org/

Если вы используете PHP на стороне сервера, вы можете просто json_encode ассоциативного массива, который вы, возможно, выбрали из базы данных.

var name = 'Bob'; //x.innerHTML;
var email = name_email_map[name];
alert(email); // Alerts [email protected]
alert(name_email_map['John']); // Alerts [email protected]
15

Заявление о переключении, так как ваш код только if-elses :-)

Нет честно Лучше всего, если вы найдете простой алгоритм для создания адреса электронной почты с любым именем, например

function mail(name) {
    return name.toLowerCase() + "@gmail.com";
}
var email = mail("Bob") // example usage

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

var mails = {
    "Steve": "[email protected]",
    "Bob": "[email protected]",
    ...
}
var email = mails[name];

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

var map = [{
    algorithm: function(name) { return name+"@something"; },
    names: ["Steve", "Bob", ...]
},{
    algorithm: function(name) { return "[email protected]"+name+".org"; },
    names: ["Mark", ...]
}];
for (var i=0; i<map.length; i++)
    if (map[i].names.indexOf(name) > -1) {
        var email = map[i].algorithm(name);
        break;
    }

или когда это немного проще:

var domains = {
    "gmail.com": ["Steve", "Bob", ...],
    "free.xxx": ["Mark", ...],
    ...
};
for (var domain in domains)
    if (domains[domain].indexOf(name) > -1)
        var email = name.toLowerCase()+"@"+domain;
        break;
    }

Просто постарайтесь максимально сократить объем передаваемых клиенту данных.

Похожие вопросы