Jquery 在真与假状态之间切换

Jquery 在真与假状态之间切换,jquery,boolean-logic,boolean-expression,Jquery,Boolean Logic,Boolean Expression,我有一个代表一个玩家的对象,让我们说2个玩家 //create a player object function player(name,state,score) { this.name = name; this.state = state; this.score = score; } var players = [ new player('player1',true,0), new player('player2',false,0) ]; 所以我希望球员们一个接

我有一个代表一个玩家的对象,让我们说2个玩家

//create a player object
function player(name,state,score) {
    this.name = name;
    this.state = state;
    this.score = score;
} 

 var players = [
new player('player1',true,0),
new player('player2',false,0)
];
所以我希望球员们一个接一个的移动。为此,我使用true或false状态。因此,如果为true,则对玩家1和vs进行计数(我计算玩家的正确答案并显示它们)

我现在拥有的是

$("#check").click(function(){
if(localCorrect == 2){

//counting number of correct cards and assigning it to the player
    var i=0; 
        if (players[i].state == true){
        var localscore = players[i].score;
        localscore++;
        score[i] = localscore;
//display the score
        $("span#"+players[i].name).html(score[i]);

        players[i].state = false;
        i++;
        players[i].state = true;
        //if(i=2)
        //{i=0}
        }

}else{
//some other thing
    }
});
我对这个有意见

所以我有两个问题:

  • 我认为我对var I的声明是错误的(它代表一个玩家的索引,我有两个,所以它应该计数到1,然后在这一点上返回到0。但是我想让它不依赖于特定的数字,所以它可以是4或10个玩家

  • 我需要切换当前玩家(I)的状态。玩家1需要为真,当切换为假时。然后玩家2的状态需要从假切换为真。(因此,如果我有两个以上的玩家,我需要将下面一个的状态切换为真,然后切换为假)

  • 我的初学者头脑发热。有人能帮忙吗?! 提前感谢!

    • 答复1:
    在设置处理程序之前,在处理程序外部声明
    i
    。而不是
    i++;
    write
    i=(i+1)%num_of_players;
    并定义变量
    num_of_players
    %
    是计算除法剩余部分的模运算器。如果按概述使用,它会从
    0
    重复迭代到
    num_of_players-1
    。使用
    players.length
    代替
    num of_players

    • 答复2:
    创建播放器对象时,将初始化播放器的状态。在给定代码中,替换
    players[i]。state=false;
    players[i]。state=true;
    players[i]。state=!players[i]。state;

    工作演示:

    注意

    • 您不必对布尔变量使用等式测试运算符;
      if(players[i].state){…
      就足够了

    • 如果使用相等性测试,请使用类型安全变量
      ==
      而不是
      =


    我对您的代码做了一些修改。现在阵列中可以有x个玩家,他们可以很好地切换状态。我对最重要的部分进行了注释,因此我认为您在阅读代码时不会遇到问题。如果您问:)

    JSFiddle:

    var得分=[0,0];
    var localCorrect=2;
    $(文档).ready(函数(){
    //创建一个播放器对象
    var Player=函数(名称、状态、分数){
    this.name=名称;
    this.state=状态;
    这个分数=分数;
    } 
    var玩家=[
    新玩家('player1',正确,0),
    新玩家('player2',假,0)
    ];
    $(“#检查”)。单击(函数(){
    如果(localCorrect==2){
    //遍历所有玩家
    for(var iterator=0;iterator
    编辑:

    您不会在players对象/数组中创建变量。您会为for..in循环创建一个变量迭代器。该变量表示数组的每个键(在本例中为players)。因此,在循环的2次迭代中,迭代器将为0和1。您还可以使用该迭代器对对象进行迭代,并获取其属性名等

    无论如何,在这种情况下,我不能使用for..in循环而不是顺序for循环:

    for(var iterator = 0; iterator < players.length; iterator++)
    
    for(var iterator=0;iterator
    这样我们就不需要将迭代器解析为整数。 阅读有关何时使用for..in循环和何时按顺序for循环的更多信息:


    非常感谢您提供了非常棒的解决方案!它工作得非常好!:-)但正如我所说,我是一个初学者。请您指出确切的内容和位置(玩家中的var iterator)是吗?你是否在玩家对象/数组中创建一个变量作为字符串,然后将其转换为整数?也许是个愚蠢的问题…但我正在努力理解。我编辑了我的答案。顺便说一句,你是保加利亚人吗?:)我真的很感谢你所做的一切。谢谢你的编辑和文档。这将是一些研究:-)是的,同时我也读了一些东西g关于in和just sequential loops…这对我来说也是一个新的教训。太新了!我是俄罗斯人,但在荷兰很好地整合:-)是的,我只需要再问一个问题:@collapsar的解决方案(如下)也是一个没有循环的有效解决方案。从语义和最终性能的角度来看,哪种解决方案实际上更好?我认为在这种情况下@collapsar示例更好,但我相信您会发现我的答案非常有用,一旦您理解了,您将找到解决未来问题的简单方法还有来自保加利亚的干杯,谢谢你
    for(var iterator = 0; iterator < players.length; iterator++)