如何让JS数组元素与获胜组合匹配?井字棋代码问题求助
问题解决:井字棋获胜组合匹配失败
问题本质
你误解了问题原因:不是数字被添加引号导致不匹配,而是存储结构不对。你的myCombos是存储单个字符的数组(最终是["1","2","3"]),而winningCombos里的是完整的拼接字符串(比如"123")。直接用myCombos[0]对比时,取的是数组第一个元素"1",自然和"123"不相等。
解决方法
有两种常见的修复方式,选一种符合你需求的即可:
方法1:将myCombos拼接为字符串后对比
把数组里的单个字符拼接成完整字符串,再检查是否在获胜组合列表中:
const winningCombos = ["123", "456", "789"]; const myCombos = []; myCombos.splice(0, 0, "2"); myCombos.splice(0, 0, "1"); myCombos.push("3"); // 将数组元素拼接成连续字符串 const myComboStr = myCombos.join(''); // 检查是否存在于获胜组合中 if (winningCombos.includes(myComboStr)) { console.log("Success") } else { console.log("Fail") }
方法2:调整winningCombos为数组的数组
把获胜组合改成二维数组,再对比数组内容是否匹配:
const winningCombos = [["1","2","3"], ["4","5","6"], ["7","8","9"]]; const myCombos = []; myCombos.splice(0, 0, "2"); myCombos.splice(0, 0, "1"); myCombos.push("3"); // 检查是否匹配任意一个获胜组合 const isWin = winningCombos.some(combo => combo.length === myCombos.length && combo.every((val, idx) => val === myCombos[idx]) ); if (isWin) { console.log("Success") } else { console.log("Fail") }
为什么原代码失败
原代码执行后myCombos的值是["1","2","3"],myCombos[0]是字符串"1",而winningCombos[0]是字符串"123",两者内容完全不同,因此会输出Fail。引号本身不是问题,它只是字符串的语法标识,单个字符和拼接后的字符串本身就不相等。
内容的提问来源于stack exchange,提问作者Justin Thyme
相关产品推荐
相关产品推荐

