百万个IF语句的替代方案

9

我正在使用JavaScript从网页中提取姓名并将它们串联在一起(可能使用数组)。一旦我将所有的名字收集起来,我需要创建另一个字符串,其中包括所有这些人的电子邮件地址。这些电子邮件地址不在网页上,所以我必须在我的脚本中列出每个可能的thisName=thisEmail。

我曾经试图通过制作大量的if语句来解决这个问题,但是我认为一定有更有效的方法。请问有什么建议吗?

var x = getElementById("names");
var name = x.InnerHTML;
var email;
if (name == 'Steve'){ email == 'steve462@gmail.com'; }
if (name == 'Bob'){ email == 'duckhunter89@gmail.com'; }
....

3
也许是某种数据库? - vcsjones
一个有一百万个case的switch语句... - T I
2
根据您提供的有限示例,email 似乎只是名称的小写版本,附加了 @gmail.com。如果是这种情况,您不需要任何控制结构。 - Anthony Grist
抱歉,@AnthonyGrist。我举的例子不太好。这些电子邮件比只有名字“@gmail.com”更随机。 - Jonathan Eckman
3个回答

16

一个switch语句,因为你的代码只有if-else :-)

不过说实话,最好的方法是找到一个简单的算法来从任何给定的名称创建电子邮件地址,例如

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

如果它们差异太大,您可以使用对象作为键值映射:

var mails = {
    "Steve": "steve@gmail.com",
    "Bob": "bob1@freemail.org",
    ...
}
var email = mails[name];

如果你需要确定要使用哪种算法,可以将它们组合起来:

var map = [{
    algorithm: function(name) { return name+"@something"; },
    names: ["Steve", "Bob", ...]
},{
    algorithm: function(name) { return "info@"+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;
    }

尽可能减少要传递给客户端的数据量。


2
你可以将所有的电子邮件地址存储在一个关联数组中,例如:

伪代码

var emailsList = ["steve" => "steve@gmail.com", "bob" => "bob@gmail.com"];
then email = emailsList[name]; will solve your problem

这只是一个非 JavaScript 的“关联数组”。 - Bergi

1

您可以提前创建一个对象:

var name_email_map = {
 "Steve": "steve@gmail.com",
 "Bob": "bob@gmail.com",
 "John": "j7hogli123123@telus.net"
}

通过一些服务器端语言和相应的JSON库很容易输出。这个页面底部有JSON库列表:http://www.json.org/

如果你使用的是PHP作为服务器端语言,你可以json_encode一个关联数组,该数组可能已经从数据库中选择了。

var name = 'Bob'; //x.innerHTML;
var email = name_email_map[name];
alert(email); // Alerts bob@gmail.com
alert(name_email_map['John']); // Alerts j7hogli123123@telus.net

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接