arrays - 从数组中随机选择值而不重复
问题描述
嗨:我是 Javascript 和 HTML 的新手,自学了一个月。我正在做一个小项目,当我单击一个按钮时,表格中会出现 3 个随机锻炼练习。我将附上我的代码以显示我到目前为止所拥有的内容。
问题:当 for 循环运行时,它会打印 3 次相同的随机选择项目,而不是 3 个不同的项目。
目标:当我单击一个按钮时,该数组会打印 3 个不同的数组值。
var workouts = ['situps', 'planks', 'hollow rock']
var copy = workouts.slice();
var table = '';
var i = 1;
for(var j = 0; j < i; j++)
{
var answer = copy.splice(Math.floor(Math.random()*workouts.length), 1);
table += '<tr>';
table += '<td>';
for(var i = 0; i < 1; i++){
table += answer;
}
table += '</td>';
table += '</tr>';
}
function potato() {
document.getElementById('hi').innerHTML += ('<table border = 1>' + table + '</table>');
}
//Output: Sit ups, Sit ups, Sit ups
解决方案
您好,欢迎来到 Stackoverflow。
由于您的 for 循环,您的代码显示相同输出的问题正在发生。您将只进入一次循环,因为i
变量是1
.
您真正想要做的是拥有与要显示的元素数量一样多的循环。
从数组中显示 3 个唯一且随机的元素的一种方法是:
var workouts = ['situps', 'planks', 'hollow rock'];
var copy = workouts.slice();
var table = '';
for(var j = 0; j < 3; j++) {
var random = Math.floor(Math.random() * copy.length);
var answer = copy[random];
table += '<tr>';
table += '<td>';
table += answer;
table += '</td>';
table += '</tr>';
//Removing the selected element so it won't show again.
copy.splice(random, 1);
}
function potato() {
document.getElementById('hi').innerHTML += ('<table border = 1>' + table + '</table>');
}
推荐阅读
- rest - 在 Jersey 2 中缓存客户端
- delphi - TIdTCPServer 停止时 SSL_accept 中的 Indy / Libssl32 访问冲突
- php - 试图用 html 表单填充 sql 表
- javascript - 从两个不同的状态中选择一个选项
- loopbackjs - 如何在 CEST 时区返回日期字段
- ios - 使用 currentUserRecordId.recordName 哈希而不是“__defaultOwner__”查询 cloudkit
- python-3.x - 如何使用用户输入打印语句?
- html - 如何在侧容器中的元素之间添加边距而不推送到下一行
- java - 是否可以从 Python 运行 java 以创建 .png?
- c# - 在 xaml 中使用键绑定捕获一系列字符