Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Random non repeating array JS (solving without .includes())

I need array with random non repeating values. I find solving with includes() but i want make without it.

CODE

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

function getRandArray(n, min, max) {
    //n - array length

    var randArr = [];
    randArr[0] = rand(min, max);

    for (var i = 0; i < n; i++) {

    var randNum = rand(min, max);
        for (var j = 0; j < randArr.length; j++){
            if (randNum != randArr[j])
                randArr[i] = randNum;
            else 
                randNum = rand(min, max);
        }
    }
    return randArr;
}

1 Answers

You can leverage the power of the ES6 Set to do this very easily. Since you are looking for an array output, you can simply use Array.from and pass in the set to return from the function. Here's what it would look like:

function rand(min, max){
    return Math.round( Math.random() * (max - min) + min);
}
function getRandArr(n, min, max) {
  var set = new Set();
  // ensure that the number of unique numbers they want is possible
  var maxNumsInArr = Math.min(n, max-min+1);
  while(set.size < maxNumsInArr) {
    set.add(rand(min, max));
  }
  return Array.from(set);
}

console.log(getRandArr(10, 0, 10));
console.log(getRandArr(5, 100, 399));
console.log(getRandArr(5, 0, 2)); // only 3 possible unique values, so length will be 3
like image 127
mhodges Avatar answered Feb 02 '26 17:02

mhodges



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!