3 回答
TA贡献1845条经验 获得超8个赞
首先数组不能比较
试试这个例子
let a = [0,2,3]
let b = [0,2,3]
alert( a === b )
您需要了解的是,当您保存数组时。您实际上所做的是在内存中创建对该数组的引用。
然后再次尝试这个例子
let a = [0,2,3]
let b = a
alert( a === b )
你会明白的,为什么?因为在第一种情况下,您尝试在内存中使用两个单独的地址。这意味着a & b 地址不同但相同kind of apartment。但在第二种情况下,您正在比较相同的地址。
因此,最简单的方法是将它们转换为字符串,然后尝试比较它们。
JSON.stringify(a)==JSON.stringify(b)
然后你就会得到你想要的结果。虽然如果这些数组实例的属性顺序始终相同,那么这可能会起作用,但这为极其讨厌的错误敞开了大门,这些错误可能很难追踪。
TA贡献1827条经验 获得超8个赞
如果不是忘记返回值并将 if 移到外部,那么您的最后一个示例是正确的。
const winConditions = [
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 3, 6],
[1, 4, 7],
[2, 5, 8],
[0, 4, 8],
[2, 4, 6]
];
const squaresIndices = [0, 4, 8];
const isWin = winConditions.some(
(arr) =>
{
// return if this combination is matching or not
return arr.every(
(square) =>
{
// return if the value matches or not
return squaresIndices.includes(square);
}
);
}
);
// Then test the result
if (isWin)
{
alert("Game Over");
}
TA贡献1805条经验 获得超10个赞
winConditions.forEach((array) => {
if(JSON.stringify(array)==JSON.stringify(squaresIndices)){
alert("Game Over")
}
})
您不能直接在 JavaScript 中比较两个数组。您需要将其转换为字符串以进行比较。您还可以使用 toString() 而不是 JSON.stringify()
添加回答
举报