首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Javascript中通过switch()语句使用数组

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

Stack Overflow用户
提问于 2013-07-24 02:26:34
回答 5查看 31.8K关注 0票数 13

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

代码语言: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;

尽管"sortedHand“数组成功地存储值(就像我在console.log中看到的那样),但switch()语句总是返回默认情况,并且每个人都会得到一个直接刷新。我担心这是我用来声明可能的数组值的文字方法,以便与整个"sortedHand“进行比较,但我不知道更好的方法。有没有可能以这种方式使用switch()?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-07-24 02:31:53

您可以尝试对数组的文本表示形式执行switch

代码语言:javascript
复制
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.
}

作为直接指定每种情况的另一种选择,也许可以使用对象构建一个函数调度表,并完全摆脱开关。

代码语言:javascript
复制
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(' ')]();
票数 25
EN

Stack Overflow用户

发布于 2013-07-24 02:34:21

一种更快、可能可重用、更灵活的方法是使用对象而不是case:

代码语言:javascript
复制
var ok= {
    '1 1 4 3 2':1,
    '1 1 5 3 2':2,
    '1 1 5 4 2':3,
    '1 1 5 4 3':4
}[ sortedHand.join(' ') ] ;
if(ok){ sortedHand.push( ok ,"Pair"); }

当一个输出依赖于一个输入时,对象工作得很好。如果你需要在每种情况下做五件事,那么你必须用例,但如果你只需要X变成Y,( 1:1),查找对象形状的表是理想的。

我想象一个RegExp可以在这里工作,我在一个connect4游戏中使用它们来识别一行中的4个,但是上面的逻辑表应该可以和你描述的一样好或者更好。

票数 2
EN

Stack Overflow用户

发布于 2013-07-24 02:32:55

这并不能完全满足您的要求,但是您可以使用sortedHand.join(',')并将其与[1,1,1,2,5].join(',')进行比较,后者将比较两个数组,如果它们的内容完全相同,则应该为真(请注意使用类型为stringsnumber!)不过,公平地说,我不能想象你为什么要这样设计你的逻辑。即使是一个简单的纸牌游戏,也有数十万种可能的牌。您可能会更好地使用underscore.js的集合管理函数,因为它会更简单,也是一种更好的实践。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17818127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档