从 HTML 输入字段创建随机 javascript 数组

时间:2021-07-27 19:54:13

标签: javascript html arrays function

我有一个基本的 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)
}

3 个答案:

答案 0 :(得分:0)

一个问题是您的随机游戏选择数组中可能会出现重复项。打乱数组(随机化)然后只获取 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"));
}

答案 1 :(得分:0)

你可以像这样使用 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)
}

答案 2 :(得分:0)

这有效,但没有解决随机函数可以选择重复项的问题。

<!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>