另外还有一百万个IF语句

使用JavaScript我把名字拉出网页,并以某种方式将它们串在一起(可能与数组一起)。 一旦我收集所有的名字,我需要另一个string,给出所有的电子邮件地址的名称。 电子邮件地址不在网页上,所以我必须以某种方式在我的脚本中列出每个可能的thisName = thisEmail。 我即将做出这样的陈述,但我认为必须有一个更有效的方法。 有什么build议么?

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

switch语句,因为你的代码只有在 – elses 🙂

不,说实话。 最好的情况是,如果你find一个简单的algorithm来创build一个电子邮件地址从任何给定的名字,如

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

你也可以结合这些,如果你必须确定你需要使用哪种algorithm:

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

只要尽可能地减less提供给客户端的数据量。

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

伪代码

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

你可以预先创build一个对象:

 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关联数组,你可能从数据库中select了这个数组。

 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