8

使用 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'; }
....
4

3 回答 3

15

一个 switch 语句,因为您的代码只是 if-elses :-)

不,老实说。最好的办法是,如果您能找到一个简单的算法来从任何给定名称创建电子邮件地址,例如

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;
    }

尽量减少交付给客户端的数据量。

于 2012-04-05T13:01:27.333 回答
1

您可以将所有电子邮件地址存储在关联数组中,例如

伪代码

var emailsList = ["steve" => "steve@gmail.com", "bob" => "bob@gmail.com"];
then email = emailsList[name]; will solve your problem
于 2012-04-05T13:04:03.700 回答
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
于 2012-04-05T13:04:07.307 回答