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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:03:13