[英]I want to generate random numbers till 3 but i don't want to repeat them. How can i make it work?
[英]I need to make an array of 15 random integers. I have a function but dont want numbers to repeat
我正在為一個學校項目。 我需要生成一個介於1和50之間的15個隨機整數的數組。我有一個函數,但是我不希望數字重復。 (例如,如果數字3位於索引0,則我不希望它再次出現在數組中。)如果我能在不獲取重復數字的問題上得到一些幫助,那將是很好的。
感謝您的任何幫助!
var arr;
function genArray() {
//generates random array
arr = [];
for (var i = 0; i < 15; i++) {
var min = 1;
var max = 50;
var arrayValue = Math.floor(Math.random() * (max - min + 1)) + min;
arr.push(arrayValue);
}
arr.sort(function(a, b) {
return a - b
});
console.log(arr);
}
在循環中,當數字在數組中時生成一個新的隨機數。 換句話說,僅當新數字尚未在數組中時才繼續。
var arr; function genArray() { //generates random array arr = []; for (var i = 0; i < 15; i++) { var min = 1; var max = 50; do { var arrayValue = Math.floor(Math.random() * (max - min + 1)) + min; }while(arr.includes(arrayValue)) arr.push(arrayValue); } arr.sort(function(a, b) { return a - b }); console.log(arr); } genArray();
您可以創建一個函數,在該函數中檢查數字(如果其已在數組中),然后重新生成該數字,否則將其推入數組中
var arr;
function genArray() {
//generates random array
arr = [];
for (var i = 0; i < 15; i++) {
var min = 1;
var max = 50;
var arrayValue = Math.floor(Math.random() * max) + min;
if(checkno(arrayValue)==true)
arr.push(arrayValue);
}
arr.sort(function(a, b) {
return a - b
});
console.log(arr);
}
function checkno(var no)
{
for(var i=0;i<arr.length;i++)
{
if(arr[i]==no)
return false;
else
return true;
}
}
另一種解決方案涉及Set對象 ,集合僅具有唯一元素,忽略具有相同值的多個元素。
為此用途實現的set對象的示例:
var temp = new Set(); while (temp.size < 15) { var min = 1; var max = 50; temp.add(Math.floor(Math.random()*(max-min+1))+min); }
此方法使用Arrow函數forEach
並includes
函數。
let LENGTH = 15; let numbers = new Array(LENGTH).fill(); let findRandomNumber = (i) => { let rn; while (numbers.includes((rn = Math.floor(Math.random() * 50) + 1))) {} numbers[i] = rn; }; numbers.forEach((_, i) => findRandomNumber(i)); console.log(numbers.sort((a, b) => a - b));
.as-console-wrapper { max-height: 100% !important }
您無需檢查結果數組並重新生成數字。 效率不高。
請查看以下代碼段:
function get_N_rand(N = 15, min = 1, max = 50) { // set default values var N_rand = [], range = []; for (var i = min; i <= max;) range.push(i++); // make array [min..max] while (N_rand.length < N) { // cut element from [min..max] and put it into result var rand_idx = ~~(Math.random() * range.length); N_rand.push(range.splice(rand_idx, 1)[0]); } return N_rand; } console.log(JSON.stringify( get_N_rand() )); // run with defaults console.log(JSON.stringify( get_N_rand(6, 10, 80) )); // run with arbitraries
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.