亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查一個數組是否包含另一個數組的元素

檢查一個數組是否包含另一個數組的元素

鳳凰求蠱 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 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號