array.includes问题

时间:2017-11-05 19:36:02

标签: javascript

所以我的问题似乎是getNumString()方法操作不正确,因为while循环无限期地继续,但我似乎无法弄清楚原因。该套牌应该填充你在其中看到的示例字符串,但它永远不会调用它们中的任何一个,而是第一个while循环不会无限期地进行(当然代码有些变化)。任何见解将不胜感激。

let deck = [
    //"cardR01C01", "cardR01C01",
  ];

function getNumString(num) {
  if (num < 10) {
    return "0" + num.toString();
  }
  else {
    return num.toString();
  }
}

function getRandomNum(upperLimit) {
  return Math.floor((Math.random() * upperLimit) + 1);
}

function fillDeck() {
  let cardString = ".cardR" + getNumString(getRandomNum(4)) + "C" +
    getNumString(getNumString(13));
  while (deck.includes(cardString)) {
    cardString = ".cardR" + getNumString(getRandomNum(4)) + "C" +
      getNumString(getNumString(13));
  }
  deck.push(cardString);
  deck.push(cardString);
}

for (let i = 0; i < (numCards / 2); i++) {
  fillDeck();
}

*经过一些测试后,我发现真正的问题在于.includes函数。谁能告诉我为什么?

1 个答案:

答案 0 :(得分:0)

您的意思是在代码中使用==而不是getRandomNum(13)吗?您的代码只能生成4个唯一的字符串: .cardR01C13,。cardR02C13,.cardR03C13,。cardR03C13。如果getNumString(13)足够大,那么在生成几张牌之后,所有这些情况都将被覆盖,但只要该牌已经在牌组内,你的while循环将继续尝试生成牌(即它继续尝试生成独特的卡片)。但是,它无法生成任何更独特的卡片,因此循环将永远持续。