2012-04-05 35 views
8

Sử dụng JavaScript Tôi sẽ rút tên ra khỏi trang web và xâu chuỗi chúng lại với nhau bằng cách nào đó (có thể đi với một mảng). Khi tôi thu thập tất cả các tên với nhau, tôi cần tạo một chuỗi khác cung cấp tất cả địa chỉ email của tên. Các địa chỉ email không có trên trang web vì vậy tôi sẽ phải liệt kê mọi điều có thể thisName = thisEmail trong kịch bản của tôi bằng cách nào đó. Tôi đã sắp tiếp cận điều này với việc tạo ra một tỷ lệ nếu có câu nói nhưng tôi nghĩ rằng đó phải là một cách hiệu quả hơn. Bất kỳ đề xuất?Thay thế cho một triệu câu lệnh IF

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

Có lẽ một cơ sở dữ liệu thuộc loại nào đó? – vcsjones

+0

tuyên bố chuyển đổi với một triệu trường hợp ... –

+2

Dựa trên ví dụ giới hạn mà bạn đã cung cấp, 'email' dường như chỉ là phiên bản chữ thường của tên có '@ gmail.com', được thêm vào cuối. Nếu đó là trường hợp, bạn không cần bất kỳ loại cấu trúc kiểm soát nào. –

Trả lời

15

Một tuyên bố chuyển đổi, như mã của bạn chỉ là if-elses :-)

Không, một cách trung thực. Điều tốt nhất là nếu bạn muốn tìm một thuật toán đơn giản để tạo một địa chỉ email từ bất kỳ tên nào đó, như

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

Nếu chúng khác nhau để nhiều, bạn có thể sử dụng một đối tượng như một giá trị bản đồ chính:

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

bạn cũng có thể kết hợp đó, nếu bạn có để xác định thuật toán bạn cần sử dụng:

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

hoặc khi nó là một chút đơn giản hơn:

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

Chỉ cần cố gắng giảm lượng dữ liệu để phân phối cho khách hàng nhiều nhất có thể.

1

Bạn có thể lưu trữ tất cả các địa chỉ email trong một mảng kết hợp như

mã giả

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

chỉ rằng đây không phải là một" mảng kết hợp "javascript. – Bergi

+0

Tôi đã viết như mã giả –

1

Bạn có thể tạo một đối tượng trước:

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

Đây sẽ là dễ dàng để đầu ra từ một số ngôn ngữ phía máy chủ với thư viện JSON cho bất kỳ ngôn ngữ nào bạn đang sử dụng. Có một danh sách thư viện JSON ở cuối trang này: http://www.json.org/

Nếu bạn đang sử dụng PHP ở phía máy chủ, bạn có thể chỉ cần tạo một mảng kết hợp mà bạn có thể đã chọn từ cơ sở dữ liệu.

var name = 'Bob'; //x.innerHTML; 
var email = name_email_map[name]; 
alert(email); // Alerts [email protected] 
alert(name_email_map['John']); // Alerts [email protected] 
Các vấn đề liên quan