JSFiddle - React, Tailwind, and code Playground

HTML

<button id="btn-draw">Draw a card</button>

JavaScript

console.clear();

// エースカードの数字
const ace = [1, 11];
// 山札を生成
const cardsInDeck = Array.from({length: 13}, (_, i) => Array(4).fill((i===0 ? 'A' : i+1))).flat();
// ['A', 'A', 'A', 'A', 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13]
console.log(cardsInDeck)

// クラスを定義
class Player {
  constructor() {
    this.cardsInHand = []; // 手札
  }

  // 配列の長さの範囲内(残りの山札数)で、ランダムな番号を生成するメソッド
  getRandomIndex(allCardsArr) {
    return Math.floor(Math.random() * allCardsArr.length - 1);
  }

  // 配列(残りの山札)から、カードを選択するメソッド
  getRandomCard(allCardsArr, index) {
    return allCardsArr[index];
  }

  // 配列(手札)の合計値が、22未満か確認するメソッド
  // エースの時は1として扱う
  isSmallerThan22(numOrStr) {
    return this.cardsInHand.reduce((acc, cur) => acc + (cur === 'A' ? ace[0] : cur), 0) + (numOrStr === 'A' ? ace[0] : numOrStr) < 22;
  }

  // 山札からカードを引いて、手札にいれるメソッド
  drawCard(allCardsArr) {
    let randIdx = this.getRandomIndex(allCardsArr);
    let card = this.getRandomCard(allCardsArr, randIdx);

    // 配列の長さが3未満(今持っている手札が2枚まで)の場合
    if (this.cardsInHand.length < 3) {
      while (true) {
        // 手札と新しくひいたカードの合計値が22未満か確認
        const flag = this.isSmallerThan22(card);

        // 22未満なら、whileループを終了する
        if (flag) {
          break;

        // 22以上なら、カードを引き直す
        } else {
          console.log('手札が2枚以下、かつ、合計が21を超えるので、カードを引き直します。');
          randIdx = this.getRandomIndex(allCardsArr);
          card = this.getRandomCard(allCardsArr, randIdx);
        }
      }
    }

    // 引いたカードを、山札から削除する
    const [pickedCard] = allCardsArr.splice(randIdx, 1);

    // 引いたカードを、手札にいれる
    this.cardsInHand.push(pickedCard);
  }
}

const user = new Player();
const enemy = new Player();

const btnDraw = document.querySelector('#btn-draw');
btnDraw.addEventListener('click', drawCard);

function drawCard() {
  // 山札のカードが0枚の時、処理を終了する
  if (cardsInDeck.length === 0) {
    console.log('山札にカードがありません。');
   ...