谷歌表互斥数字顺序随机数生成器

Luk*_*man 5 javascript google-sheets

有点口吃......我目前正在使用下面的脚本在单元格 I6:M6 中生成 1 到 200 之间的随机数。对于我的预期目的,这个脚本有两个问题(都不是主要的,但我想要一些“抛光”。

问题 1) 不互斥。这是最大的问题,因为五个数字中的每一个都必须是唯一的。它们不太可能被重复,但是当它发生时有点烦人。

问题 2)我完全不知道如何或是否可能生成这些随机数,然后按数字顺序放入 I6:M6,I6 是最小的。

我是一个完全的业余爱好者和 JavaScript(以及任何其他代码),我只是设法从我在其他地方找到的信息拼凑起来,但我对它的工作原理有一个非常模糊的理解。

///////////////////////////////////////

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [ {name:"Roll Dice",functionName:"rollDice"} ];
  sheet.addMenu("Script", entries);
};

function rollDice() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("sheet1 (New)");
    var cell = sheet.getRange("I6");
  cell.setValue( Math.floor((Math.random()*200)+1) );
    var cell = sheet.getRange("J6");
  cell.setValue( Math.floor((Math.random()*200)+1) );
    var cell = sheet.getRange("K6");
  cell.setValue( Math.floor((Math.random()*200)+1) );
    var cell = sheet.getRange("L6");
  cell.setValue( Math.floor((Math.random()*200)+1) );
    var cell = sheet.getRange("M6");
  cell.setValue( Math.floor((Math.random()*200)+1) );

};

///////////////////////////////////////
Run Code Online (Sandbox Code Playgroud)

Rap*_*tro 2

我在 mainLoop 函数中添加了一个排序函数,现在应该按数字排序。

function myFunction() {
  mainLoop()
}

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("sheet1");

function generateNumber(){
return Math.floor((Math.random()*200)+1)
}

function setValue(_val, _address){
   var cell =  sheet.getRange(_address)
   cell.setValue(_val)
}

function generate(){
  var array = []
  while(array.length<5){
    var rand = generateNumber()
    var isUnique = array.indexOf(rand) === -1
    if(isUnique){
      array.push(generateNumber())
    }

  }
  return array
}

function mainLoop(){
    var array = generate()
      array.sort(function(a, b) {
  return a - b;
});
    var addresses = ['I6','J6','K6','L6','M6']
    addresses.forEach(function (_address,_index){
        setValue(array[_index],_address)
    })
}
Run Code Online (Sandbox Code Playgroud)