如何在Javascript中从一个范围中随机选择多个不同的整数?

时间:2017-04-28 07:52:27

标签: javascript

如何编写像select_from(n, min, max)这样的函数,它随机选择n个不同的整数,范围从min(包含)到max(排除)。

在我搜索时,所有答案都是从数组/范围中选择一个项目/数字,而不是从多个项目中选择。我目前可以想到的一种方法是创建一个从minmax的整数数组。然后在每次选择后重复选择该数组中的项目,删除所选项目:

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;
}

有没有有效的方法?谢谢!

3 个答案:

答案 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数组:

&#13;
&#13;
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;
&#13;
&#13;