Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 随机非重复数组JS(不带.includes()求解)_Javascript_Arrays - Fatal编程技术网

Javascript 随机非重复数组JS(不带.includes()求解)

Javascript 随机非重复数组JS(不带.includes()求解),javascript,arrays,Javascript,Arrays,我需要具有随机非重复值的数组。我发现使用includes()解决问题,但我希望不使用它 代码 函数随机数(最小值、最大值){ 返回Math.round(Math.random()*(max-min)+min); } 函数getRandArray(n、min、max){ //n-数组长度 var Randar=[]; randArr[0]=rand(最小值,最大值); 对于(变量i=0;i

我需要具有随机非重复值的数组。我发现使用includes()解决问题,但我希望不使用它

代码

函数随机数(最小值、最大值){
返回Math.round(Math.random()*(max-min)+min);
}
函数getRandArray(n、min、max){
//n-数组长度
var Randar=[];
randArr[0]=rand(最小值,最大值);
对于(变量i=0;i
您可以非常轻松地利用的强大功能来完成此操作。由于您正在查找数组输出,因此只需使用
array.from
并传入集合以从函数返回即可。下面是它的外观:

函数随机数(最小值、最大值){
返回Math.round(Math.random()*(max-min)+min);
}
函数getRandArr(n、最小值、最大值){
变量集=新集();
//确保他们想要的唯一号码的数量是可能的
var maxNumsInArr=Math.min(n,max-min+1);
while(set.sizelog(getRandArr(5,0,2));//只有3个可能的唯一值,因此长度将为3
如果ES6不是一个选项,您可以将随机数转换为对象的字符串键,并利用对象不允许重复这样的属性这一事实:

function rand(min, max){
    return Math.round( Math.random() * (max - min) + min);
}

function getRandArr(n, min, max) {
    if (n > (max - min + 1)) {
        throw "Cannot create array of size " + n;
    }
    var res = {};
    while (Object.keys(res).length < n) {
        var r = rand(min, max);
        res[r] = true;
    }
    var array = Object.keys(res);
    return array;
}

console.log(getRandArr(100, 0, 10000));
函数随机数(最小值、最大值){
返回Math.round(Math.random()*(max-min)+min);
}
函数getRandArr(n、最小值、最大值){
如果(n>(最大-最小+1)){
抛出“无法创建大小数组”+n;
}
var res={};
while(Object.keys(res).length
在得到结果后,您总是可以通过一次传递将字符串数组转换回数字


将属性添加到对象将使用属性名称的哈希,这样您就有O(1)时间来检查数字是否唯一。

查看我最初也错过了这一点,但如果他们使用
getRandArr(5,0,2)
它将无限循环。我用一个解决这个问题的方法更新了我的帖子,但是还有很多其他的方法来处理这个问题;在这种情况下,throw可能是正确的回答。@mhodges如果提供的最小值也大于最大值,但这似乎超出了问题的范围,则必须小心。是的,同意。我们无法确定OP想要做什么,但至少能为未来的观众提供它是件好事
function rand(min, max){
    return Math.round( Math.random() * (max - min) + min);
}

function getRandArr(n, min, max) {
    if (n > (max - min + 1)) {
        throw "Cannot create array of size " + n;
    }
    var res = {};
    while (Object.keys(res).length < n) {
        var r = rand(min, max);
        res[r] = true;
    }
    var array = Object.keys(res);
    return array;
}

console.log(getRandArr(100, 0, 10000));