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