2012-04-05 102 views
8

使用JavaScript我拉出來的名字網頁並以某種方式串在一起,他們(可能與數組會)。一旦我把所有的名字一起收集起來,我需要製作另一個字符串,給出名字的所有電子郵件地址。電子郵件地址不是在網頁上,所以我必須列出所有可能的thisName = thisEmail在我的劇本弄好了。我正準備通過製作一個bazillion if語句來解決這個問題,但我認爲必須有一個更有效的方法。有什麼建議麼?替代百萬IF語句

var x = getElementById("names"); 
var name = x.InnerHTML; 
var email; 
if (name == 'Steve'){ email == '[email protected]'; } 
if (name == 'Bob'){ email == '[email protected]'; } 
.... 
+3

也許是某種類型的數據庫? – vcsjones 2012-04-05 13:01:12

+0

一百萬個開關語句...... – 2012-04-05 13:01:16

+2

根據你提供的有限例子,'email'似乎只是帶'@ gmail.com'的名字的小寫版本,附加到最後。如果是這樣的話,你不需要任何形式的控制結構。 – 2012-04-05 13:03:14

回答

15

switch語句,因爲你的代碼只有當-別人的:-)

沒有,真的。最好的事情是,如果你想找到一個簡單的算法來創建從任何給定名稱的電子郵件地址,像

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

只是儘量減少數據量傳送到客戶端,就像你可以。

1

您可以在關聯數組保存所有的電子郵件地址類似

僞代碼

var emailsList = ["steve" => "[email protected]", "bob" => "[email protected]"]; 
then email = emailsList[name]; will solve your problem 
+0

只,這不是一個javascript「關聯數組」。 – Bergi 2012-04-05 13:20:42

+0

我把它寫成僞代碼 – 2012-04-05 13:21:47

1

你也可以事先創建一個對象:

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

這將是很容易輸出從一些服務器端語言和一個JSON庫,爲您使用的任何語言。還有在本頁面底部的JSON庫的列表:http://www.json.org/

如果您在使用上你可以json_encode關聯數組,你可能已經從數據庫中選擇的服務器端PHP。

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