替代一百万个IF语句

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

....

回答:

一个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;

}

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

以上是 替代一百万个IF语句 的全部内容, 来源链接: utcz.com/qa/412013.html

回到顶部