前提・実現したいこと
ドットインストールでjavascriptを学んでいます。
その中で数字タッチゲームを作っています。
その中で、splice()を使ったプログラムが理解できませんでした。
発生している問題・エラーメッセージ
const num = nums.splice(Math.floor(Math.random() * nums.length), 1)[0];
のところで、最後に配列[0]をつけていることがわかりません。
[0]をつけずに実行したところプログラムは[0]をつけた時と同じように動いていました。
[0]をつけなくても、ランダムにnumsからひとつずつ要素を取りだして、numに代入されるのではないですか?
該当のソースコード
JavaScript
1'use strict'; 2 3{ 4class Panel { 5constructor() { 6this.el = document.createElement('li'); 7this.el.classList.add('pressed'); 8} 9 10getEl() { 11return this.el; 12} 13 14activate(num) { 15this.el.classList.remove('pressed'); 16this.el.textContent = num; 17} 18} 19 20class Board { 21constructor() { 22this.panels = []; 23for (let i = 0; i < 4; i++) { 24this.panels.push(new Panel()); 25} 26this.setup(); 27} 28 29setup() { 30const board = document.getElementById('board'); 31this.panels.forEach(panel => { 32board.appendChild(panel.getEl()); 33}); 34} 35 36activate() { 37const nums = [0, 1, 2, 3]; 38 39this.panels.forEach(panel => { 40const num = nums.splice(Math.floor(Math.random() * nums.length), 1)[0]; 41panel.activate(num); 42}); 43} 44} 45 46const board = new Board(); 47 48const btn = document.getElementById('btn'); 49btn.addEventListener('click', () => { 50board.activate(); 51}); 52}
試したこと
MDNでも調べたのですが、
「取り除かれた要素を含む配列です。要素が 1 つのみ削除された場合は、要素数 1 の配列が返されます。要素が削除されなかった場合、空の配列が返されます。」
と記載されており、最後に配列をつけるとは書いてなかったため、疑問のままです。。