2012-04-05 14 views
8

JavaScript'i kullanma Web sayfasından adlar alıyorum ve onları bir şekilde bir araya getiriyorum (muhtemelen bir diziyle karşılaşıyorum). Bütün isimleri bir araya getirdiğimde isimlerin tüm e-posta adreslerini veren başka bir dizge yapmam gerekiyor. E-posta adresleri web sayfasında değil, bu yüzden her olası thisName = thisEmail komutunu bir şekilde listelemem gerekecek. İfadeleri anlatmak için bu konuya yaklaşmak üzereydim ama daha verimli bir yol olduğunu düşündüm. Baska öneri?Bir milyon IF deyimine alternatif

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

Belki bir çeşit veritabanı? – vcsjones

+0

Bir milyonluk durumla birlikte bir anahtar deyimi ... –

+2

Sağladığınız sınırlı örneğe göre, "e-posta" yalnızca sonuna eklenen '@ gmail.com' ile küçük harfli bir sürüm gibi görünüyor. Eğer durum buysa, herhangi bir kontrol yapısına ihtiyacınız yoktur. –

cevap

15

bir switch deyimi, kodunuz sadece olduğu gibi if-birinin :-) dürüst

Hayır. Eğer onlar kadar farklılık varsa, bir anahtar-değer-harita olarak bir nesneyi kullanabilirsiniz

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

gibi herhangi bir isimden bir e-posta adresi oluşturmak için basit bir algoritma bulmak istiyorum eğer iyi şey olacaktır:

var mails = { 
    "Steve": "[email protected]", 
    "Bob": "[email protected]", 
    ... 
} 
var email = mails[name]; 

kullanmak gereken algoritma belirlemek için varsa da, bu birleştirmek olabilir:

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

veya biraz daha basit olduğu zaman:

İstemciye teslim edeceğiniz kadar veri miktarını azaltmaya çalışın.

1

Sen önceden bir nesne oluşturabilir

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

adından daha rastlantısaldır; yalnızca bu, javascript "ilişkilendirici dizi" değildir. – Bergi

+0

Bunu sözde kod olarak yazdım –

1

sözde kodu gibi bir ilişkisel dizi içinde tüm e-posta adresini saklayabilirsiniz:

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

Bu çıkış kolay olurdu Kullandığınız dil için bir JSON kütüphanesi ile bazı sunucu tarafı dilinden. Bu sayfanın altındaki JSON kitaplıklarının listesi vardır: http://www.json.org/

Sunucu tarafında PHP kullanıyorsanız, bir veritabanından seçmiş olabileceğiniz ilişkisel bir diziyi json_encode edebilirsiniz.

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