为了账号安全,请及时绑定邮箱和手机立即绑定

检查一个数组是否包含另一个数组的元素

检查一个数组是否包含另一个数组的元素

凤凰求蛊 2023-08-10 15:28:18
我正在尝试使用 javascript 制作井字游戏。我在嵌套数组中有获胜条件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]]我在数组中有当前玩家的标记框索引let squaresIndices = [0,4,8]当任何获胜条件发生时,我试图停止游戏。我已经尝试了以下每一项,但我不明白为什么它们不起作用。winConditions.forEach((array) => {    if (array === squaresIndices){        alert("Game Over")    }//////if (winConditions.includes(squaresIndices)){    alert ("Game Over")}//////        winConditions.some((arr) =>{            if (arr.every((square) => {                squaresIndices.includes(square)            })) {                alert("Game Over")            }        })
查看完整描述

3 回答

?
精慕HU

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)

然后你就会得到你想要的结果。虽然如果这些数组实例的属性顺序始终相同,那么这可能会起作用,但这为极其讨厌的错误敞开了大门,这些错误可能很难追踪。


查看完整回答
反对 回复 2023-08-10
?
斯蒂芬大帝

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");

}


查看完整回答
反对 回复 2023-08-10
?
holdtom

TA贡献1805条经验 获得超10个赞

winConditions.forEach((array) => {

    if(JSON.stringify(array)==JSON.stringify(squaresIndices)){

        alert("Game Over")

    }

})

您不能直接在 JavaScript 中比较两个数组。您需要将其转换为字符串以进行比较。您还可以使用 toString() 而不是 JSON.stringify()


查看完整回答
反对 回复 2023-08-10
  • 3 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信