[英]Pushing unique numbers within a range to an array in Javascript
我正在尝试将1到15的数字插入数组。 这是代码:
<html>
<head></head>
<body>
<button id="myBtn" value="HELLO">HELLO</button>
<script type="text/javascript">
var btn = document.getElementById("myBtn");
var num = null;
btn.addEventListener('click', function() {
var questions = new Array();
num = Math.floor(Math.random() * 14 + 2);
questions.push(num);
for (var i = 1; i <= 15; i++) {
num = Math.floor(Math.random() * 14 + 2);
if (questions.indexOf(num) !== -1) {
alert(num + " Exists in array. So not pushing it");
} else {
alert(num + " is not found. So pushing it");
questions.push(num);
}
console.log(questions);
}
alert(questions);
})
</script>
</body>
</html>
如果在打开控制台的情况下运行它。 您会注意到,尽管数组中没有数字,但是in
运算符仍会丢弃该数字而不进行推送。 我能知道为什么以及如何纠正吗?
还有什么更好的方法可以每次以随机顺序插入x个数字。
您不应in
数组中使用in
运算符。 你应该做的是
if (questions.indexOf(num) !== -1) {
与数组一起使用in
,它将不检查值,而是检查数组的索引。 这就是您的代码失败的原因。
请检查我的这个答案以了解更多信息,为什么不应该in
Arrays中使用in
运算符。
生成N个唯一随机数的最好方法是生成数字列表,然后将其洗牌,如下所示
function getRandomNumbers() {
var rand, index = 0,
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
array.forEach(function(value) {
rand = Math.floor(Math.random() * ++index);
array[index - 1] = array[rand];
array[rand] = value;
});
return array;
}
console.log(getRandomNumbers());
这是从_.shuffle
库的_.shuffle
函数采用的,该函数使用Fisher-Yates Shuffle算法对数据列表进行_.shuffle
。
in
运算符适用于对象 ,因此您实际上要检查数组是否具有索引而不是值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.