2011-01-31 31 views
7

Có cách nào ngắn để viết những điều sau đây bằng JavaScript hoặc jQuery không?Mã ngắn hơn cho câu lệnh "if" JavaScript này

if (this.id==="a" || this.id==="b" || this.id==="c" || this.id==="d") 
+5

Dưới đây là một trang để so sánh hiệu suất của lời đề nghị khác nhau dưới đây: http://jsperf.com/set-memberbship –

+0

@ Jason Lebrun Tôi có +1 cho bản trình diễn hay - nhưng [thường xuyên hơn thì không] luôn, * rõ ràng đầu tiên *. Tôi đổ lỗi cho CPU của tôi cho việc đăng bài FF chậm ;-) –

Trả lời

5
if (['a','b','c','d'].indexOf(this.id) >= 0) { ... } 

hoặc

if (this.id in {'a':0,'b':0,'c':0,'d':0}) { ... } 
+2

Nếu 'this.id' là' 'a'', ví dụ đầu tiên sẽ không biết. – ClosureCowboy

+0

Rất tiếc, cảm ơn. Đã chỉnh sửa. –

+0

Cả amzer của @ limc (d in o) đều tương tự và cách nhanh nhất để viết nó. Cảm ơn bạn đã cung cấp liên kết hiệu suất. – Hussein

6

Làm thế nào về điều này?

if (this.id in { "a":1, "b":1, "c":1, "d":1 }) { 
    ... 
} 

... hay cái này?

if("abcd".indexOf(this.id) > -1) { 
    ... 
} 

+0

** + 1 ** Tôi có lẽ sẽ không sử dụng '1' làm giá trị giả. – ClosureCowboy

+0

@ClosureCowboy: Cảm ơn lời khuyên ... Tôi cũng đã thêm một ví dụ khác, mặc dù nó thực sự không thể đọc được theo ý kiến ​​của tôi. :) – limc

+0

tôi sẽ không kết hợp tất cả các chữ cái như một từ. Điều này sẽ không hoạt động nếu biến có nhiều hơn 1 chữ cái, mặc dù nó là một cách hay để viết nó. – Hussein

1

Bạn có thể thử đoạn mã sau. Đặc biệt là khi bạn có nhiều hơn bốn giá trị thử nghiệm.

if (/^[abcdef]$/.test(this.id)) { 
    ... 
} 
+1

Làm thế nào về nếu biến là nhiều hơn thì một chữ cái. – Hussein

+0

'if (/^(val1 | val2 | val3) $ /. Kiểm tra (this.id)) {...}' –

+0

Cập nhật tập lệnh thử nghiệm để bao gồm cả hai ý tưởng này. –

2

Một khả năng là một câu lệnh chuyển đổi.

switch(this.id){case"a":case"b":case"c":case"d": 
    //do something 
} 
+0

hoạt động quá nhưng chúng tôi sẽ lặp lại trường hợp từ 4 lần giống như trong ví dụ của tôi lặp lại từ this.id 4 lần. – Hussein

+0

@alex: Có, nhưng nó ngắn hơn một chút, vì vậy tôi nghĩ tôi sẽ ném nó ra khỏi đó. : o) – user113716

+0

+1 cho điều đó .... – Hussein

0

Các inline băm nặc danh (d in o) thực hiện đã được bóp méo trong tests as originally written, vì băm không nội tuyến trong các thử nghiệm.

Lạ lùng thay, đúng trường hợp inline băm, so với các trường hợp băm xác định trước, là chậm hơn trong Firefox 4, nhưng nhanh hơn 50% trong Chrome 12.

Tuy nhiên, một điểm quan trọng hơn là d in o bỏ lỡ điểm băm - bạn không phải lặp lại để tìm kiếm.

Hai dòng, nhưng vẫn còn khá ngắn, và by far the fastest:

var o = {a:1,b:1,c:1,d:1}; 
if(o[this.id]){...} 
Các vấn đề liên quan