javascript - 按下复位按钮后功能不工作

标签 javascript onclick

“清除”按钮将数组清除回默认值,但之后 newGame 函数拒绝运行。在调用 Clear 函数之前,newGame 函数可以按预期完美运行。我相信新的游戏功能是罪魁祸首,但我不知道它的哪一部分可能会破坏它。

在 newGame 之后应该期待一个不同的数组 被第二次调用,但我最终得到了一个 无论调用多少次都是空数组。

let shuffledBoxes = [];
let boxes = []
let boxMax = 16;
let boxCount = 0;

const newGame = () => {
  for (let i = boxes.length; i != boxMax; i++) {
    if (boxes.length === boxMax) {
      return null;
    }
    if (boxCount != Math.floor(boxMax * 0.4)) {
      if (boxes.includes(2) === false) {
        boxes.push(2);
      }
      boxes.push(1);
      boxCount++;
    } else {
      boxes.push(0);
    }
  }
};

const randomBoxes = () => {
  for (let i = boxes.length - 1; i >= 0; i--) {
    math = Math.floor(Math.random() * boxMax);
    shuffledBoxes.push(boxes[math]);
    boxes.splice([math], 1);
    boxMax--;
  }
};

const boxesClear = () => {
  for (let i = shuffledBoxes.length - 1; i > -1; i--) {
    shuffledBoxes.pop();
  }
  for (let j = boxes.length - 1; j > -1; j--) {
    boxes.pop();
  }
  boxCount = 0;
};

newGame();
randomBoxes();
boxesClear();
//After this point, newGame does not like to run.
newGame();
randomBoxes();

Logging boxes and shuffledBoxes show that
newGame is working before boxClear is called.

boxes =  []
shuffledBoxes =  [ 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 0 ]
boxCount = 6

boxes =  []
shuffledBoxes =  []
boxCount =  0

最佳答案

您需要重置 boxMax16 因为它在randomBoxes 中变为0 > 由于

boxMax--;

let shuffledBoxes = [];
let boxes = []
let boxMax = 16;
let boxCount = 0;

const newGame = () => {
  for (let i = boxes.length; i != boxMax; i++) {
    if (boxes.length === boxMax) {
      return null;
    }
    if (boxCount != Math.floor(boxMax * 0.4)) {
      if (boxes.includes(2) === false) {
        boxes.push(2);
      }
      boxes.push(1);
      boxCount++;
    } else {
      boxes.push(0);
    }
  }
};

const randomBoxes = () => {
  for (let i = boxes.length - 1; i >= 0; i--) {
    math = Math.floor(Math.random() * boxMax);
    shuffledBoxes.push(boxes[math]);
    boxes.splice([math], 1);
    boxMax--;
  }
};

const boxesClear = () => {
  for (let i = shuffledBoxes.length - 1; i > -1; i--) {
    shuffledBoxes.pop();
  }
  for (let j = boxes.length - 1; j > -1; j--) {
    boxes.pop();
  }
  boxCount = 0;
  boxMax = 16
};

newGame();
randomBoxes();



boxesClear();
//After this point, newGame does not like to run.


newGame();
randomBoxes();


console.log(shuffledBoxes);
console.log(boxes);

您还可以缩短 boxesClear 函数

const boxesClear = () => {
  shuffleBoxes = [];
  boxes = [];
  boxCount = 0;
};

你也可以有一个衬垫。

const boxesClear = () => shuffleBoxes.length = boxes.length = boxCount = 0

关于javascript - 按下复位按钮后功能不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55567061/

相关文章:

jquery - 单击按钮时循环 div 中的值

javascript - 使用来自 ajax 下拉菜单的 onclick 事件更新隐藏的输入值

javascript - 在 javascript 中使用物理文件位置 onclick 进行文件下载

javascript - Angular Filter,将 JSON 文件日期与今天的日期进行比较

javascript - 从外部 JS 创建垂直选项卡加载视觉效果

javascript - 如何检查 Javascript 中是否存在字符串/数组/对象?

javascript - Backbone、Coffeescript - 在 AJAX 中将函数作为回调传递

jquery - 如果发生平移(mousedown + mousemove + mouseup),则阻止任何元素上的单击事件

java - 如何为 ListView 项目制作 onClick? [不重复]

JavaScript - 如果满足条件,则将内容包装在 DIV 中