通过Javascript中的switch()语句使用数组

Gui*_*reu 12 javascript arrays switch-statement

我正在尝试通过Javascript开发一个简化的扑克游戏.我已经列出了给定玩家可能拥有的所有可能的牌组合,其价值如下:

switch(sortedHand)
{           
 //Pair
     case [1,1,4,3,2]: sortedHand.push(1,"Pair"); break;
     case [1,1,5,3,2]: sortedHand.push(2,"Pair"); break; 
     case [1,1,5,4,2]: sortedHand.push(3,"Pair"); break;
     case [1,1,5,4,3]: sortedHand.push(4,"Pair"); break;
     case [1,1,6,3,2]: sortedHand.push(5,"Pair"); break;
     case [1,1,6,4,2]: sortedHand.push(6,"Pair"); break;
     case [1,1,6,4,3]: sortedHand.push(7,"Pair"); break;
     case [1,1,6,5,2]: sortedHand.push(8,"Pair"); break;
     case [1,1,6,5,3]: sortedHand.push(9,"Pair"); break;
     case [1,1,6,5,4]: sortedHand.push(10,"Pair"); break;
Run Code Online (Sandbox Code Playgroud)

即使"sortedHand"数组成功存储了值(正如我通过console.log看到的那样),switch()语句也总是返回默认情况,并且每个人都获得了直接刷新.我担心这是我用来声明可能的数组值与整个"sortedHand"进行比较的文字方法的问题,但我不知道更好.甚至可以以这种方式使用switch()吗?

voi*_*hos 22

您可以尝试switch使用数组的文本表示.

switch(sortedHand.join(' '))
{           
    //Pair
    case '1 1 4 3 2': sortedHand.push(1,"Pair"); break;
    case '1 1 5 3 2': sortedHand.push(2,"Pair"); break; 
    case '1 1 5 4 2': sortedHand.push(3,"Pair"); break;
    case '1 1 5 4 3': sortedHand.push(4,"Pair"); break;
    // etc.
}
Run Code Online (Sandbox Code Playgroud)

作为直接指定每个案例的替代方法,可能使用对象构建函数调度表并完全摆脱开关.

var dispatch = {};

// Build the table however you'd like, for your application
for (var i = 0; i < 10; i++) {
    (function(i) {
        var hand = ...; // Add your hand logic here
        dispatch[hand] = function() { sortedHand.push(i, "Pair"); };
    })(i);
}

// Execute your routine
dispatch[sortedHand.join(' ')]();
Run Code Online (Sandbox Code Playgroud)


Ber*_*rgi 6

switch()语句始终返回默认大小写

那是因为比较不检查数组内容,而是检查数组对象本身.对象被认为是相同的,因此没有任何东西等于文字实例化的对象.

甚至可以以这种方式使用switch()吗?

是的,可以在switch语句中使用对象,但您必须在案例中使用引用.不适用于您的问题.

在你的情况下,我建议一个字符串:

switch(sortedHand.join())
{           
 //Pair
     case "1,1,4,3,2": sortedHand.push(1,"Pair"); break;
     case "1,1,5,3,2": sortedHand.push(2,"Pair"); break; 
     case "1,1,5,4,2": sortedHand.push(3,"Pair"); break;
     case "1,1,5,4,3": sortedHand.push(4,"Pair"); break;
     case "1,1,6,3,2": sortedHand.push(5,"Pair"); break;
     case "1,1,6,4,2": sortedHand.push(6,"Pair"); break;
     case "1,1,6,4,3": sortedHand.push(7,"Pair"); break;
     case "1,1,6,5,2": sortedHand.push(8,"Pair"); break;
     case "1,1,6,5,3": sortedHand.push(9,"Pair"); break;
     case "1,1,6,5,4": sortedHand.push(10,"Pair"); break;
Run Code Online (Sandbox Code Playgroud)

但我想有一个更好的算术解决方案来检测你所追求的模式.这会更短更快,但我不确定这个代码片应该做什么.