簡體   English   中英

從 HTML 輸入字段創建隨機 javascript 數組

[英]Creating a Random javascript array from an HTML input field

我有一個基本的 HTML 表單,要求輸入 1 到 10 之間的數字。基於該數字,我想創建一個新數組。 現在,代碼顯示了新創建數組的警告框,但最終它將是一個顯示結果的表格。 當前數組有 10 個值,我希望它隨機生成一個新數組。 我想我擁有它,只是缺少一件事或幾件事。

function createRandomArray () {

var numOfGamesElement = document.getElementById("numOfGames");
var numOfGames = numOfGamesElement.value;

var gamesPicked [];

  const boardGames = ["UNO", "Monopoly", "Clue", "Pandemic", "Catan", "Articulate!", "Codenames", "Fallout", "Candy Land", "Scrabble"];


let gamesPicked = boardGames[Math.floor(Math.random() * boardGames.length)];

for(let i = 0; i < numOfGames; i++){
  gamesPicked.push(i);
}
  alert(gamesPicked.join("\n"));
//createTable(gamesPicked)
}

一個問題是您的隨機游戲選擇數組中可能會出現重復項。 打亂數組(隨機化)然后只獲取 X 項的slice可能會更好,就像這樣。 請注意,我通過在前面加上+numOfGames值從字符串更改為數字

/* Randomize array in-place using Durstenfeld shuffle algorithm */
function shuffleArray(array) {
    for (var i = array.length - 1; i > 0; i--) {
        var j = Math.floor(Math.random() * (i + 1));
        var temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}    
const boardGames = ["UNO", "Monopoly", "Clue", "Pandemic", "Catan", "Articulate!", "Codenames", "Fallout", "Candy Land", "Scrabble"];    
function createRandomArray () {
   let numOfGames = +document.getElementById("numOfGames").value || 0;
   let gamesPicked = shuffleArray(boardGames).slice(0, numOfGames)
   alert(gamesPicked.join("\n"));
}

你可以像這樣使用vanilla JS來做到這一點

function samples(array, length) {
    var samplesSet = new Set();
    if (array.length < length) {
        throw Error("requested length is greater than given array");    
    }
    while(samplesSet.size < length) {
        samplesSet.add(array[Math.floor(Math.random() * array.length)]);
    }
    return [...samplesSet];
}
function createRandomArray () {

var numOfGamesElement = document.getElementById("numOfGames");
var numOfGames = numOfGamesElement.value;

  const boardGames = ["UNO", "Monopoly", "Clue", "Pandemic", "Catan", "Articulate!", "Codenames", "Fallout", "Candy Land", "Scrabble"];


let gamesPicked = samples(boardGames, numOfGames);
  alert(gamesPicked.join("\n"));
//createTable(gamesPicked)
}

或者像這樣使用lodash sampleSize

let _ = require('lodash');

function createRandomArray () {

var numOfGamesElement = document.getElementById("numOfGames");
var numOfGames = numOfGamesElement.value;

  const boardGames = ["UNO", "Monopoly", "Clue", "Pandemic", "Catan", "Articulate!", "Codenames", "Fallout", "Candy Land", "Scrabble"];


let gamesPicked = _.sampleSize(boardGames, numOfGames);
  alert(gamesPicked.join("\n"));
//createTable(gamesPicked)
}

這有效,但沒有解決隨機函數可以選擇重復項的問題。

<!DOCTYPE html>
<head>
<script>
function createRandomArray () {
    var numOfGamesElement = document.getElementById("numOfGames");
    var numOfGames = numOfGamesElement.value;

    const boardGames = ["UNO", "Monopoly", "Clue", "Pandemic", "Catan", "Articulate!", "Codenames", "Fallout", "Candy Land", "Scrabble"];

    var gamePicked;
    var gamesPicked = {};
    for(let i = 0; i < numOfGames; i++){
      gamePicked = boardGames[Math.floor(Math.random() * boardGames.length)];
      gamesPicked[i] = gamePicked;
      alert(gamesPicked[i]);
    }
    // could build table here
}
</script>
</head>

<body>
<label>Number of games (1 to 10):
<input id="numOfGames">
</label>
<button onclick="createRandomArray()">Click Me</button>
</body>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM