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

找到相同的数组时如何停止运行循环?

找到相同的数组时如何停止运行循环?

LEATH 2022-07-08 15:59:39
我正在做一个井字游戏。winningPlays棋盘上的每个方块都有一个从 0 到 8 的索引。为了检查获胜者,我有一个包含所有潜在获胜组合的二维数组。我有两个数组,分别包含 Xs 或 Os -xPlays和的播放oPlays。排序后xPlays,我想比较它以winningPlays查看是否有任何数组匹配。如果他们这样做,我想console.log('X wins')。我似乎找不到在正确的时间执行 console.log 以确定获胜者的方法。这是一段问题代码:const winningPlays = [        [0,1,2], //across top        [3,4,5], //across middle        [6,7,8], //across bottom        [0,3,6], //left down        [1,4,7], //middle down        [2,5,8], //right down        [0,4,8], //top left to bottom right        [2,4,6] // top right to bottom left    ]; //length == 8    function checkForWinner() {        for(let i = 0; i < winningPlays.length; i++){            for(let j = 0; j < winningPlays[i].length; j++){                if (xPlays.length < 3) {                    return;                } else if (winningPlays[i][j] !== xPlays[j]) {                    console.log(winningPlays[i][j])                    console.log(xPlays[j])                    return;                }                console.log('win')  // executes every time that xPlays.length >= 3            }        }     };这是我的 codepen 草稿的链接:https ://codepen.io/CDLWebDev/pen/gOawjvE
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

你有几个问题。


首先,一旦发现不匹配,就从函数返回,但后面的元素winningPlays可能匹配。


其次,您期望xPlays完全匹配其中一个winningPlays元素。但是 X 可以有额外的玩法。例如,如果xPlays = [2, 3, 4, 5], that should match[3, 4, 5] . What you really want to test is if all the elements of one of thewinningPlays elements are included inxPlays`,它们不必具有相同的索引。


function checkForWinner() {

  if (xPlays.length < 3) {

    return;

  }

  for (let i = 0; i < winningPlays.length; i++) {

    let win = true;

    for (let j = 0; j < winningPlays[i].length; j++) {

      if (!xPlays.includes(winningPlays[i][j])) {

        win = false;

        break;

      }

    }

    if (win) {

      console.log('win');

      break;

    }

  }

}


查看完整回答
反对 回复 2022-07-08
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

遍历每个子数组

检查该子数组的所有项目是否都存在于玩家数组中

function checkWinner() {

    return winningPlays.some(list => {

        return list.every(item => {

            return xPlays.includes(item);

        });

    });

}


查看完整回答
反对 回复 2022-07-08
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

我会通过执行以下操作使其更简单


const winningPlays = [

    "0,1,2", //across top

    "3,4,5", //across middle

    "6,7,8", //across bottom

    "0,3,6", //left down

    "1,4,7", //middle down

    "2,5,8", //right down

    "0,4,8", //top left to bottom right

    "2,4,6" // top right to bottom left

]; //length == 8


function checkForWinner(xPlays) {

    var convertXPlays = xPlays.toString(); //if there are spaces in your array, make sure to remove it

    if (winningPlays.indexOf(convertXPlays) > -1)

    {

       console.log('win!');

    }

};


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

添加回答

举报

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