You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测数组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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 08:47:30