React井字棋教程:for循环内return null导致无法正确判定胜者
井字棋获胜判定函数的问题修复
你的代码问题出在return null的位置——把它放在for循环的else分支里,会导致函数第一次循环就终止:只要当前检查的获胜线不满足条件,函数直接返回null,后面的竖线、斜线等其他获胜组合根本没机会被检查。
修正后的代码
function theWinner(squares) { const lists = [ [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 (let i = 0; i < lists.length; i++) { const [a, b, c] = lists[i]; if (squares[a] && squares[a] === squares[b] && squares[a] === squares[c]) { return squares[a]; } } // 遍历完所有获胜组合都没找到,才返回null return null; }
逻辑说明
- 移除循环内的else分支:当前获胜线不满足条件时,直接进入下一次循环,继续检查其他组合
- 将
return null移到循环外部:只有当所有8种获胜组合都检查完毕,确实没有符合条件的情况,才返回null表示暂无获胜者
这样函数就能正确遍历所有可能的获胜情况,找到第一个满足条件的玩家(X或O),或者在无获胜者时返回null。
内容的提问来源于stack exchange,提问作者Herma
相关产品推荐
相关产品推荐

