2011-10-13 27 views
22

Tôi cần một chút trợ giúp cú pháp với toán tử bậc ba sẽ giúp tôi đặt các biểu tượng đánh dấu chính xác vào bản đồ tốt của tôi. Tôi có ba vùng 0,1 và 2 có các biểu tượng 0, 1 và 2.Multiple Ternary Operators

Tôi thường chỉ có hai khu vực để toán tử bậc ba này hoạt động tốt;

icon: (area == 1) ? icon1: icon0, 

Bây giờ tôi cần thêm biểu tượng thứ ba bổ sung (biểu tượng 2) cho khu vực2.

Tôi đã thử các phương pháp khác nhau nhưng dường như không thể làm đúng.

Trả lời

36

Cú pháp sẽ là:

icon: (area == 1) ? icon1 : (area == 2) ? icon2 : icon0, 

Nhưng điều này đang bắt đầu trở nên phức tạp. Bạn cũng có thể tốt hơn khi chỉ cần tạo một hàm để thực hiện công việc này thay thế:

icon: getIcon(area), 

... 

function getIcon(area) { 
    if (area == 1) { 
    return icon1; 
    } else if (area == 2) { 
    return icon2; 
    } 

    return icon0; 
} 
+0

Sau khi tôi đã viết điều này, tôi nhận ra rằng 0 luôn luôn bản đồ để biểu tượng0, do đó, câu trả lời của Pointy là thích hợp hơn. Tuy nhiên, phương pháp này vẫn khả thi nếu bạn cần một giá trị 'bắt tất cả' như 'icon0' trong trường hợp này. –

+0

Cảm ơn Justin, tôi đã quyết định chức năng phù hợp nhất với nhu cầu của mình. Tôi cũng tìm thấy nó thân thiện hơn để làm việc với hơn là toán tử bậc ba có thể phát triển lớn hơn theo thời gian. Cảm ơn. – Sam

+0

Không có vấn đề, vui mừng bạn thấy điều này hữu ích! –

2
icon: (area == 0) ? icon0 : (area == 1) ? icon1 : icon2, 
17

Làm thế nào về:

icon: [ icon0, icon1, icon2 ][area], 
+1

+1 - Chừng nào diện tích 0 luôn bản đồ để biểu tượng 0, đây là phương pháp ngắn gọn nhất ... –

+0

Có đó là một điểm tốt - nó dựa trên "khu vực" đang cư xử tốt, vì vậy để nói chuyện. – Pointy

+0

Tôi thích phương pháp này nhưng đánh dấu Justin là câu trả lời vì nó phù hợp nhất với nhu cầu. Rất cám ơn cho mẹo này. – Sam

7

Làm thế nào về một đối tượng theo nghĩa đen.

icons = { 
    0: icon0, 
    1: icon1, 
    2: icon2 
} 

icon = icons[area]; 
4

Rất đơn giản cách

var test1 = false 
var test2 = true 
var test = test1 ? test1 : test2 ? test2 : 'some default value' 
+0

đây không phải là một thử nghiệm rất tốt, như 'test1? test1: (test2? test2: 'một số giá trị mặc định') 'và' (test1? test1: test2)? test2: 'một số giá trị mặc định'' đều cho kết quả tương tự – chharvey

+0

một thử nghiệm tốt hơn sẽ là: 'var test = true; var result = test === true? 'nó là sự thật': test === false? 'nó là sai': 'nó là null''. Bằng cách đó khi bạn nhóm hai toán tử cuối cùng, 'test === true? 'nó là đúng': (test === false? 'nó là false': 'it is null') ', bạn nhận được' 'nó là true'' (đúng), nhưng khi bạn nhóm hai toán tử đầu tiên, ' (test === true? 'nó đúng': test === false)? 'nó là sai': 'nó là null'', bạn nhận được' 'nó là false'' (không chính xác). Thử nghiệm này tốt hơn vì nó cho bạn thấy các nhóm toán tử ngầm định. – chharvey