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