如何编写像select_from(n, min, max)
这样的函数,它随机选择n个不同的整数,范围从min
(包含)到max
(排除)。
在我搜索时,所有答案都是从数组/范围中选择一个项目/数字,而不是从多个项目中选择。我目前可以想到的一种方法是创建一个从min
到max
的整数数组。然后在每次选择后重复选择该数组中的项目,删除所选项目:
function select_from(n, min, max) {
var range = [];
var result = [];
for (var i = min; i < max; i++) {
range.push(i);
}
for (var j = 1; j <= n; j++) {
var select = Math.floor(Math.random()*range.length);
result.push(range[select]);
range = range.splice(select, 1);
}
return result;
}
有没有有效的方法?谢谢!
答案 0 :(得分:0)
像这样修改你的第二个for循环
for (var j = 1; j <= n; j++) {
var select = Math.floor(Math.random()*range.length);
if (result.indexOf(range[select]) === -1)
result.push(range[select]);
}
return result;
答案 1 :(得分:0)
如何不初始化整数数组而是random()
范围呢?
function select_from(n, min, max) {
var result = [];
for (var i = 0; i < n; i++) {
result.push(Math.floor(Math.random() * (max - min + 1) + min));
}
return result;
}
var numbers = select_from(100, 5, 10);
console.log(numbers)
答案 2 :(得分:0)
另一种选择,但我不知道相对性能影响,是使用splice():
这意味着你可以保持for循环,但不断改变range
数组:
function select_from(n, min, max) {
var range = [];
var result = [];
for (var i = min; i < max; i++) {
range.push(i);
}
for (var j = 0; j < n; j++) {
var select = Math.floor(Math.random()*range.length);
result.push(range.splice(select, 1)[0]);
}
console.log(result);
return result;
}
select_from(10,1,11)
&#13;