使用array.includes()检查数组中的两件事

时间:2019-04-18 05:00:48

标签: javascript arrays

我正在基于纯JS制作井字游戏,但是在为玩家定义获胜条件时,我希望它在条件匹配时提醒用户。

如果选中,则为。是X玩它变成红色,如果是O则变成蓝色,它还将box元素的id注册到一个数组中,该数组包含所有被占用的盒子,还取决于盒子是红色还是蓝色,它还标记了id以及0,1(0是红色1是蓝色)

所以数组看起来像这样(11,0 22,1 33,0)11是第一行第一列0意味着红色占据了那个位置(红色= X)

过去,我尝试使用array.includes来检查是否已单击的框是连续的还是对角线的,以及是否也由同一播放器选中了它们。 我使用了and运算符,因此它检查同一位玩家是否连续检查了3个..以便仅当连续三个都被选中时才会提醒获胜。我已将布尔值存储在redwincond bluewincond

function logic(clickedArr) {
    redwinCond = clickedArr.contains(("11,0") && ("22,0") && ("33,0"));

    bluewinCond = clickedArr.contains(("11,1") && ("22,1") && ("33,1"));

    console.log(bluewinCond, redwinCond)

    if (redwinCond === true) {
        alert("Red wins !")
    } else if (bluewinCond === true) {
        alert("Blue wins !")
    } else {

    }    
}

示例 redwinCond = clickedArr.contains(("11,0") && ("22,0") && ("33,0")); 预期结果:同一颜色警报用户检查完所有3个

结果:仅在单击指定的第三个框(33,0)时才会发出警报。不检查是否也检查了其他2个

3 个答案:

答案 0 :(得分:1)

没有任何名为contains的Array方法,可以将Array#every方法与Array#includes方法一起使用。

 ["11,0", "22,0", "33,0"].every(v => clickedArr.includes(v))

仅供参考:,由于所有其他值都是真实的,因此在您的代码中("11,0") && ("22,0") && ("33,0")将得出"33,0"

答案 1 :(得分:1)

使用every

["11,0", "22,0", "33,0"].every(s => clickedArr.includes(s));

答案 2 :(得分:0)

一种更干净的方法是存储您的电路板状态,而不是每次存储每次单击。它会使您的生活变得简单得多。例如,一种方法是将其存储在这样的嵌套数组中:

var board = [
    ['x', '', 'o'],
    ['x', '', ''],
    ['',  '', '']
];

右上角的正方形将像board[0][2]那样被访问。 您还可以在胜利检查功能中迭代行和列,而不必手动对每个行和列进行硬编码。