LoginSignup
0
0

More than 1 year has passed since last update.

【JavaScript】重複しない整数乱数を生成する関数

Last updated at Posted at 2021-09-01

参考

JavaScriptで重複しない乱数を生成する…関数化されていない重複しない整数乱数の生成方法

やりたいこと

重複しない整数乱数を配列で生成したい + 関数として利用したい

やったこと

重複しない整数乱数を生成する関数を参考URLのコードをちょっと改変して作成

コード

Google Apps Script環境で実装しているためJavaScriptだと修正が必要かも。

改変前の関数化していないコード

randomizing.js
function randomizing(){
  var arr = [];
  numArr = []; 
  for(var i=0; i < 5; i++){
     arr[i]=i+1;
  }

  for(var j = 0,len = arr.length; j < 5; j++, len--) {
    rndNum = Math.floor(Math.random()*len);
    numArr.push(arr[rndNum]);
    arr[rndNum] = arr[len-1];
  }

  //debug
  for(var k=0; k<numArr.length; k++){
    console.log(numArr[k])
  }
}

実行結果

4
1
2
5
3

関数化したコード

generateRandomNumArray.js
//test用
function test(){
  generateRandomNumArray(30,5);
}

//重複しない1~maxNumの整数乱数を生成する関数
/**
 * @param {number} maxNum - 取りうる最大値
 * @param {number} generateArrayLength - 生成する配列の長さ
 * @return {number[]}
 */
function generateRandomNumArray(maxNum, generateArrayLength){
  let generateArray = []; //ランダム格納用配列
  let numberArray = []; //ランダム生成用配列

  //ランダム生成用配列を作成
  for(let i=0; i<maxNum; i++){
    numberArray[i] = i+1;
  }

  //ランダム格納用配列にランダム整数を格納
  for(let j=0,len=numberArray.length; j<generateArrayLength; j++,len--){
    let rndNum = Math.floor(Math.random()*len);
    generateArray.push(numberArray[rndNum]);
    numberArray[rndNum] = numberArray[len-1];
  }

  //debug
  for(let k=0; k<generateArray.length; k++){
    console.log(generateArray[k]);
  }

  return generateArray;
}//end function

実行結果

19
25
17
29
30

あとがき

GAS+SSでランダムな規定数の行にランダムチェック的なフラグをたてたかったのだが、重複しないような乱数配列生成をしてくれるようなジャストな関数はなかった。
もしかしたらもっと短く済む方法があるかもしれない。
あと正直コードの意味がわからない、コピペでも動いてしまうって怖いね

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0