2014-07-19 32 views
10

Đây chỉ là một ví dụ đơn giản về những gì tôi đang cố gắng để làm:Có thể sử dụng .contains() trong câu lệnh switch không?

switch (window.location.href.contains('')) { 
    case "google": 
     searchWithGoogle(); 
     break; 
    case "yahoo": 
     searchWithYahoo(); 
     break; 
    default: 
     console.log("no search engine found"); 
} 

Nếu nó không thể/khả thi điều gì sẽ là một lựa chọn tốt hơn?

Giải pháp:

Sau khi đọc một số câu trả lời tôi thấy sau đây là giải pháp đơn giản.

function winLocation(term) { 
    return window.location.href.contains(term); 
} 
switch (true) { 
    case winLocation("google"): 
     searchWithGoogle(); 
     break; 
    case winLocation("yahoo"): 
     searchWithYahoo(); 
     break; 
    default: 
     console.log("no search engine found"); 
} 
+0

bạn đã cố sử dụng regex chưa? –

+0

Không. Nó sẽ phải là 'chuyển đổi (đúng) {trường hợp location.href.contains (" google ") ...' đó là đồng bằng ngớ ngẩn – mplungjan

+0

Có, nhưng nó sẽ không làm những gì bạn mong đợi. Biểu thức được sử dụng cho công tắc được đánh giá * một lần * - trong trường hợp này sẽ đúng/sai là kết quả, không phải là một chuỗi. – user2864740

Trả lời

7

"Có", nhưng nó sẽ không làm những gì bạn mong đợi.

Khái niệm sử dụng cho việc chuyển đổi được đánh giá lần - trong trường hợp này contains để đánh giá đúng/sai như là kết quả (ví dụ switch(true) hay switch(false)) , không phải là một chuỗi có thể được xuất hiện trong một vụ án.

Do đó, cách tiếp cận trên sẽ không hoạt động. Trừ khi mẫu này lớn hơn/mở rộng nhiều hơn, chỉ cần sử dụng các câu lệnh if/else-if đơn giản.

var loc = .. 
if (loc.contains("google")) { 
    .. 
} else if (loc.contains("yahoo")) { 
    .. 
} else { 
    .. 
} 

Tuy nhiên, hãy xem xét nếu có một chức năng classify đó quay trở lại "google" hoặc "yahoo", vân vân, có lẽ sử dụng điều kiện như trên. Sau đó, nó có thể được sử dụng như vậy, nhưng có khả năng quá mức cần thiết trong trường hợp này.

switch (classify(loc)) { 
    case "google": .. 
    case "yahoo": .. 
    .. 
} 

Trong khi thảo luận ở trên như trong JavaScript, Ruby và Scala (và rất có thể những người khác) cung cấp cơ chế để xử lý một số chi tiết "chuyển đổi tiên tiến" cách sử dụng.

+0

Cảm ơn bạn đã trả lời. Nó đã giúp tôi tìm một giải pháp, mà tôi đã cập nhật câu trả lời chính để chứa. – RayB

+0

@ Rayz321 Vâng, đó là một hình thức có thể quá - nó không phải là sở thích của tôi/đề nghị mặc dù. – user2864740

Các vấn đề liên quan