簡體   English   中英

我需要制作一個由15個隨機整數組成的數組。 我有一個功能,但不想數字重復

[英]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函數forEachincludes函數。

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM