switch语句的行数较少?

mat*_*att 4 javascript jquery switch-statement conditional-statements

我想知道这是不是...... 

inputs.keydown(function (e) {
    switch (e.keyCode) {
        case 13:    //Enter
        case 16:    //Shift
        case 17:    //Ctrl
        case 18:    //Alt
        case 19:    //Pause/Break
        case 20:    //Caps Lock
        case 27:    //Escape
        case 35:    //End
        case 36:    //Home
        case 37:    //Left
        case 38:    //Up
        case 39:    //Right
        case 40:    //Down

        // Mac CMD Key
        case 91:    //Safari, Chrome
        case 93:    //Safari, Chrome
        case 224:   //Firefox
        break;
        default:
        $(this).addClass(fill);
        break;
    }
});
Run Code Online (Sandbox Code Playgroud)

...也可以用更少的线路?我知道我可以做一个if条件,但我想知道我是否错过了类似的东西case 13 && 16 && …

也许你们中的一些人知道更好的做法来检查所有案例并编写更少的代码行.我是在想.

先感谢您!

kap*_*apa 7

只需将代码放入一个数组中,然后您只需检查该值是否在数组中.由于您使用的是jQuery,因此您已经有了一种inArray()方法来执行此操作.

var keycodes = [13, 16, 17, 18, 19]; //and so on

//if the keycode is not found in the array, the result will be -1
if ($.inArray(e.keyCode, keycodes) === -1) { 
    $(this).addClass(fill);
}
Run Code Online (Sandbox Code Playgroud)


Aln*_*tak 7

你可以创建一个你不想来处理按键"地图" -地图查询应该是介于两者之间O(1),并O(log n)取决于实施.

var specialKeys = {
    13: 1, // Enter
    16: 1, // Shift
    ...
    224: 1 // Cmd/FF
};

inputs.keydown(function (e) {
    if (e.keyCode in specialKeys) return;
    $(this).addClass(fill);
});
Run Code Online (Sandbox Code Playgroud)

或者,因为您的"键"都是整数,您可以填充索引是键代码值的数组.

编辑删除了字符串,如@bažmegakapa所示