Javascript 检查多个值在某些方面是否匹配的最佳方法是什么?

Javascript 检查多个值在某些方面是否匹配的最佳方法是什么?,javascript,Javascript,我必须做一个井字游戏,为了让它工作,我需要有一个功能来检查是否有3个在一排 网格是这样的 012 345 678 这意味着012,345,678,036,147,258,048,246都是可能的组合。 我试过: if(clickedCells[0] && clickedCells[1] && clickedCells[2] !== "" && clickedCells[0] === clickedCells[1] && click

我必须做一个井字游戏,为了让它工作,我需要有一个功能来检查是否有3个在一排

网格是这样的

012
345
678
这意味着
012
345
678
036
147
258
048
246
都是可能的组合。 我试过:

if(clickedCells[0] && clickedCells[1] && clickedCells[2] !== "" && clickedCells[0] === clickedCells[1] && clickedCells[0] === clickedCells[2]){
        done();
}
但它不起作用,因为它是无效的

我想知道让这样一个东西工作的最好方法,因为我从来没有在一行中使用过这么多if语句,如果我独立地检查每一个东西,看起来就像一团乱麻

这意味着012345678036147258048246都是可能的组合

const winningSets = [[0, 1, 2], [3, 4, 5], ...];
return winningSets.some((winningSet) =>
    winningSet.every((cell) => cell === 'O'));
所以只需要硬编码就可以了

const winningSets = [[0, 1, 2], [3, 4, 5], ...];
return winningSets.some((winningSet) =>
    winningSet.every((cell) => cell === 'O'));
请看,通常我们希望避免硬编码值,但对于这种特定情况,基于索引的数学看起来很复杂,可读性较差。特别是当矩阵表示为线性阵列时

clickedCells[0] && clickedCells[1] && clickedCells[2] !== ""
这段代码似乎将3个布尔变量与一个空字符串进行比较。 但是,如果clickedCells包含字符串,比较的正确方法是

clickedCells[0] + clickedCells[1] + clickedCells[2] !== ""

可以将每个有效组合存储在数组中

var combinations = new Array([0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6]);
现在,您可以在整个阵列上循环,并在指定的位置检查电路板,而不是为单个组合设置if条件

if (board[combinations[a][0]] == id && board[combinations[a][1]] == id && board[combinations[a][2]] == id)
以下是Compelle的示例:
var板=新阵列(
1, 0, 0,
0, 1, 0,
0, 0, 1
);
功能检查(id){
var-ret=null;
var组合=新数组([0,1,2]、[3,4,5]、[6,7,8]、[0,3,6]、[1,4,7]、[2,5,8]、[0,4,8]、[2,4,6]);
var发现;
对于(var a=0;a控制台日志(检查(1))您可以创建包含所有可能组合的多维数组

let arr = [[0,1,2],[3,4,5]....]
然后将
some()
every()
一起使用。假设你的数组叫做“代码>游戏。所以你可以像下面这样检查是否获胜

arr.some(x => x.every(a => game[a] === game[x[0]]))
说明:
some()。所以这里不同的数组表示
x

[0,1,2],[3,4,5]...
现在,对于每个嵌套数组,我们需要检查它们在游戏中是否相同,这是代表tic tac toe游戏的1D数组

x.every(a => game[a] === game[x[0]])

上面的一行检查每个嵌套数组是否有任何一个在使用时具有所有相同元素的数组,以及游戏板的索引。

047是一个打字错误吗?应该是048,你的灵魂代码再多一点也不会有什么坏处。@HerbalMart我可以发布所有东西,但我不知道还有什么需要知道的。clickedCells是一个不包含任何内容、X或O的数组。