2011-02-17 28 views
7

Có cách nào để rút ngắn nội dung như thế này trong Javascript: if (x == 1 || x == 2 || x == 3 || x == 4) thành một cái gì đó như nếu (x == (1 || 2 || 3 || 4))?Hãy rút ngắn JS nếu hoặc tuyên bố

+2

'if (x> 0 && x <5)'? – kjy112

+0

Nếu bạn đang tìm kiếm cú pháp tương tự như những gì bạn đã đăng, thì không. Bạn nên xem xét rằng bất kỳ cách xoay vòng nào để rút ngắn nó sẽ bị ảnh hưởng. – user113716

+0

Số được sử dụng làm ví dụ để sử dụng "if (x> 0 && x <5)" sẽ không hữu ích nếu tôi so sánh chuỗi. – John

Trả lời

6

Bạn có thể sử dụng Array.indexOf

[1,2,3,4].indexOf(x) !== -1 

Bạn cũng có thể sử dụng đối tượng như một số loại bản đồ băm:

//Note: Keys will be coerced to strings so 
// don't use this method if you are looking for an object or if you need 
// to distinguish the number 1 from the string "1" 
my_values = {1:true, 2:true, 3:true, 'foo':true} 
my_values.hasOwnProperty('foo') 

Bằng cách này, trong hầu hết các trường hợp, bạn nên USI các " === "toán tử bình đẳng nghiêm ngặt thay vì toán tử ==. So sánh bằng cách sử dụng "==" có thể làm rất nhiều loại ép buộc phức tạp và đôi khi bạn có thể nhận được kết quả đáng ngạc nhiên.

+2

Vâng * đôi khi * "==" rất hữu ích, nhưng bạn có thể đúng rằng "===" nên là những gì một lập trình viên JavaScript tự động :-) – Pointy

+1

nói về cưỡng chế, khởi tạo đối tượng nào nó ba lần :-P –

1

Không phải không viết hàm để lấy mảng làm đầu vào và trả về true/false hoặc một số loại tìm kiếm mảng. Sẽ rất khó để duy trì/các nhà phát triển khác để đọc. Và nó sẽ chậm hơn đáng kể. Vì vậy, chỉ cần gắn bó với phiên bản dài hơn đúng ngữ nghĩa.

Cũng là một cách hay để xem liệu có thể rút ngắn bất kỳ điều gì đáng kể hay không là chạy nó thông qua trình biên dịch đóng và xem nó xuất hiện như thế nào.

+0

I thứ hai này. Nó thường là một ý tưởng tốt để đóng gói các kiểm tra phức tạp như thế này thành một func để truyền đạt ý nghĩa tốt hơn. –

1

Làm thế nào về:

if (x > 0 && x < 5) { 
} 
+0

Tôi nghĩ điều này, nhưng sau đó tôi nhận ra John đã trình bày nó như là một ví dụ đơn giản không phải là một nghiên cứu trường hợp để nói chuyện. –

2

Nếu trường hợp của bạn không phải là đơn giản được thể hiện bằng cách này:

if (1 <= x && x <= 4) 

Bạn có thể sử dụng một array and indexOf:

if ([1,2,3,4].indexOf(x) > -1) 

Lưu ý rằng indexOf có thể cần phải được triển khai lại.

+0

Sau khi xóa không gian, nó thực sự dài hơn 1 ký tự * (tham khảo 'indexOf()') *, nhưng được đưa ra một danh sách dài hơn các kết quả phù hợp, nó sẽ ngắn hơn. Tôi đoán nó phụ thuộc vào mã thực tế. – user113716

0

Bạn có thể viết một hàm:

function isAny(x) { 
    for (var i = 1; i < arguments.length; ++i) 
    if (arguments[i] === x) return true; 
    return false; 
} 

Sau đó, bạn có thể nói:

if (isAny(x, 1, 2, 3, 4)) { /* ... */ } 

(Cho dù sử dụng "===" hoặc "==" sẽ phụ thuộc vào ngữ nghĩa chính xác mà bạn muốn.)