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;
}
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With