从switch语句中获取计数

时间:2017-03-23 01:38:57

标签: javascript jquery

在通过switch语句运行后,我遇到了更改返回计数的问题。我的代码如下:

var count = 0;
                switch ($(this).last().data('card')) { // Regulating the count to be higher/lower  
                // Hearts
                case 'h2':
                    return count++;
                case 'h3':
                    return count++;
                case 'h4':
                    return count++;
                case 'h5':
                    return count++;
                case 'h6':
                    return count++;
                case 'h10':
                    return count--;
                case 'hj':
                    return count--;
                case 'hq':
                    return count--;
                case 'hk':
                    return count--;
                case 'ha':
                    return count--;

                    // Spades
                case 's2':
                    return count++;
                case 's3':
                    return count++;
                case 's4':
                    return count++;
                case 's5':
                    return count++;
                case 's6':
                    return count++;
                case 's10':
                    return count--;
                case 'sj':
                    return count--;
                case 'sq':
                    return count--;
                case 'sk':
                    return count--;
                case 'sa':
                    return count--;

                    // Diamonds
                case 'd2':
                    return count++;
                case 'd3':
                    return count++;
                case 'd4':
                    return count++;
                case 'd5':
                    return count++;
                case 'd6':
                    return count++;
                case 'd10':
                    return count--;
                case 'dj':
                    return count--;
                case 'dq':
                    return count--;
                case 'dk':
                    return count--;
                case 'da':
                    return count--;

                    // Clubs
                case 'c2':
                    return count++;
                case 'c3':
                    return count++;
                case 'c4':
                    return count++;
                case 'c5':
                    return count++;
                case 'c6':
                    return count++;
                case 'c10':
                    return count--;
                case 'cj':
                    return count--;
                case 'cq':
                    return count--;
                case 'ck':
                    return count--;
                case 'ca':
                    return count--;
            }
        })();

        console.log(count);

当我尝试控制台登出时,它只输出0.即使我用'h2'替换jQuery,它也无法解决问题。

我希望有人可以帮助我: - )

6 个答案:

答案 0 :(得分:2)

  

当我尝试控制台登出时,它只输出0。

你正在做后缀增量:

return count++;

这将返回count的值,然后增加count的值。

也是如此:

return count--;

这将返回count的值,然后递减count的值。

简单地解决这个问题:

return ++count; 

以及

return --count; 

Postfix and Prefix operators

答案 1 :(得分:1)

改为使用++count--count。这些将在返回之前递增和递减值。您的代码返回当前count值为0,之后不执行任何操作。

The difference between ++someValue and someValue++

答案 2 :(得分:1)

后缀增量运算符会在之后增加值

所以... return count++;将返回count,然后递增它。

您可以在增量操作符前加上增量>

return ++count;

递减运算符(--count)的工作方式相同。

您可以将此小提琴视为使用示例: https://jsfiddle.net/fjgo4Lwv/

答案 3 :(得分:1)

不,我没有直接回答你的问题。我只是觉得我可能能够帮助您将代码改进为更容易使用的东西(很多)。它甚至可以帮助您为您可能必须执行的下一次卡操作找到更好的解决方案。

所有这些切换......这是一个痛苦的写作,并将是一个难以维持。

通过一些字符串操作和一些预定义的数组,您可以让自己的生活更轻松:

//var cardValue="c10"; //for instance

var suits = ["s", "h", "d", "c"];
var upCards = ["2", "3", "4", "5", "6"];
var downCards = ["10", "j", "q", "k", "a"];

var suit = cardValue.substr(0, 1); //"c"
var card = cardValue.substr(1); //"10"

var count = 0;

if(upCards.indexOf(card) >= 0){
  count++; //postfix operator doesn't do what you think it does, see other answers
}
if(downCards.indexOf(card) >= 0){
  count--;
}
return count;

答案 4 :(得分:0)

{/ 1}}后缀运算符在包含它的操作之后递增其操作数。更具体的术语,如果你这样做

++

var x = 0; var y = (function incrementX() { return x++; })() console.log(y) //prints 0 console.log(x) //prints 1 实际上在 ++之后运行 。因此,返回并存储在return中的值是y的旧值。

x 前缀运算符可以满足您的需求。它在操作的其余部分之前递增其操作数。因此,如果您将++替换为count++,那么您的代码应该有用。

++count运算符的行为方式相同。

答案 5 :(得分:0)

Switch不是这种情况下使用的最佳选择,因为更好,但为了您的学习,您可以像这样编写开关。根据您的要求打破或返回任何一个适合突破开关

var count = 0;
var count2 = (function() {
  switch ($(this).last().data('card') || "h2") { // Regulating the count to be higher/lower  
    // Hearts
    case 'h2':
    case 'h3':
    case 'h4':
    case 'h5':
    case 'h6':

    case 's2':
    case 's3':
    case 's4':
    case 's5':
    case 's6':
      return count++;
    case 'h10':
    case 'hj':
    case 'hq':
    case 'hk':
    case 'ha':

      // Spades
    case 's10':
    case 'sj':
    case 'sq':
    case 'sk':
    case 'sa':
      return count--;
  }
})();

console.log(count);
console.log(count2);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>