如何检测数组mosseX中是否包含linesToWin的获胜三元组合?
修正你的calculateWinner函数实现
首先,咱们先揪出原代码里的核心问题:你的filter和includes用法完全搞反了逻辑——你现在是在检查单个的mossa(数字)是否包含整个获胜线数组,这显然不可能成立。正确的思路应该是:对每一条获胜线,检查这条线的所有元素是否都在mosseX里。
下面是修正后的完整函数:
calculateWinner = () => { const linesToWin = [ [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6], ]; // 遍历每一条获胜线 for (const line of linesToWin) { // 检查当前获胜线的所有元素是否都在mosseX中 const hasAllElements = line.every(num => this.state.mosseX.includes(num)); if (hasAllElements) { return true; // 找到匹配的获胜线,直接返回true } } return false; // 所有线都不匹配,返回false };
关键逻辑解释:
- 使用
for...of遍历获胜线数组,比传统for循环更简洁易读 - 用
Array.every()方法:它会检查数组中的每一个元素是否都满足指定条件(这里是num是否存在于mosseX)。只有当所有元素都满足时,才返回true - 一旦找到符合条件的获胜线,立刻返回true,不需要继续遍历剩余的线,提升效率
测试示例:
比如你给出的mosseX = [1,3,4,7],我们看获胜线[1,4,7]——这三个数字都在mosseX里,所以函数会返回true,符合预期。
如果mosseX里没有任何一条完整的获胜线,比如[0,1,3],函数就会返回false。
内容的提问来源于stack exchange,提问作者Alberto Manuguerra
相关产品推荐
相关产品推荐

