JSFiddle - React, Tailwind, and code Playground

by jun68ykt

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
    <form name="form1">
        <br>
        <span id="user">num:</span>
        <input type="text" value="" name="user" id="user1" class="user">
        <input type="text" value="" name="user" id="user2" class="user">
        <input type="text" value="" name="user" id="user3" class="user">
        <input type="text" value="" name="user" id="user4" class="user">
        <input type="text" value="" name="user" id="user5" class="user">
        <input type="text" value="" name="user" id="user6" class="user">
        <br>
        <input type="button" value="クリック!" name="win" id="win"><br>
        <span id="cpu">cpu:</span>
        <input type="text" value="" name="com" id="cpu1" readonly class="cpu">
        <input type="text" value="" name="com" id="cpu2" readonly class="cpu">
        <input type="text" value="" name="com" id="cpu3" readonly class="cpu">
        <input type="text" value="" name="com" id="cpu4" readonly class="cpu">
        <input type="text" value="" name="com" id="cpu5" readonly class="cpu">
        <input type="text" value="" name="com" id="cpu6" readonly class="cpu">
        <br>
        <span id="bonus">ラッキーナンバー</span>
        <input type="text" value="" name="com" id="cpu7" readonly class="cpu">
        <br>
        <br>
        <span id="res">当選結果</span>
    </form>
    <hr />
    <div>
        <ul>
            <li>cpu1からcpu6までと、ユーザー入力とで共通しているナンバー: <span id="json-matchedNumbers"/>
        </ul>
    </div>

CSS

input { width: 80px; font-size: 18pt;  }

.cpu { background-color: silver; }
#cpu7 { background-color: gold; }

JavaScript

document.getElementById('win').addEventListener('click', check7);

function check7() {

  // 生成するナンバーの最大値
  const MAX_NUMBER = 43;

  // 1からMAX_NUMBER までを含む配列を生成
  const nums = [...Array(MAX_NUMBER)].map((_,i) => i+1);

  // cpu を表示する input を取得
  const cpuInputs = document.getElementsByClassName('cpu');

  // nums をランダムにシャッフルして先頭のcpu個数分の配列を作成
  const cpu =  _.shuffle(nums).slice(0, cpuInputs.length);

  // cpu を画面に表示
  for (let i = 0; i < cpuInputs.length; i ++) {
    cpuInputs[i].value = cpu[i];
  }

  // ユーザーから入力されたナンバーの配列を作成
  const users = document.getElementsByClassName('user');
  const userInputNumbers = Array.prototype.map.call(users, (user) => Number(user.value)).filter(x => x);

  // cpu1からcpu6までと、userInputNumbers とで共通しているナンバーの配列を取得
  const matchedNumbers = _.intersection(cpu.slice(0, userInputNumbers.length), userInputNumbers);

  // 結果を判定して表示
  const res = document.getElementById('res');
  const luckyNumber = parseInt(document.getElementById('cpu7').value);

  switch(matchedNumbers.length) {
    case 6: // 6個一致
      res.innerHTML="当選結果:1等";
      break;
    case 5: // 5個一致
      res.innerHTML=`当選結果:${userInputNumbers.includes(luckyNumber) ? 2 : 3 }等`;
      break;
    case 4: // 4個一致
      res.innerHTML="当選結果:4等";
      break;
    case 3:  // 3個一致
      res.innerHTML="当選結果:5等";
      break;
    default: // それ以外
      res.innerHTML="当選結果:ハズレ";
      break;
  }

  // 確認用の表示
  document.getElementById('json-matchedNumbers').innerText = JSON.stringify(matchedNumbers);
};