我正在尝试构建一个快速的伪随机数生成器,具有唯一的数字,但有一个扭曲。选择的数字是从一个递增的样本集中,即(1-20)然后(2-21)...but由于我有限的编码经验,我得到了一些重复的。使用Google Script,有没有一种方法可以检查一个特定的数组元素是否存在于另一个数组中?
function temp3() {
var ss =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet6");
var range = ss.getRange("b14:av14");
var m = 0
var picks = [];
for(var j = 1; j < 48; j++) {
var array1 = [1+m, 2+m, 3+m, 4+m, 5+m, 6+m, 7+m, 8+m, 9+m, 10+m,
11+m, 12+m, 13+m, 14+m, 15+m, 16+m, 17+m, 18+m, 19+m, 20+m];
shuffleArray(array1);
picks.push(array1[0]);
m = m + 1
}
ss.getRange(16, 2, 1, 47).setValues([picks]);
}
发布于 2018-06-19 03:39:25
有很多方法可以做到这一点,但如果你不想过多地修改当前的方法,可以添加一个单独的函数来检查picks是否已经包含了你的数字。如果确实如此,则删除第一个元素并再次运行该函数。如果不是,则添加到picks。
function temp3() {
var ss =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet6");
var range = ss.getRange("b14:av14");
var m = 0
var picks = [];
for (var j = 1; j < 48; j++) {
var array1 = [1+m, 2+m, 3+m, 4+m, 5+m, 6+m, 7+m, 8+m,
9+m, 10+m, 11+m, 12+m, 13+m, 14+m, 15+m,
16+m, 17+m, 18+m, 19+m, 20+m];
shuffleArray(array1);
picks = addToPicks(array1,picks)
m = m + 1
}
ss.getRange(16, 2, 1, 47).setValues([picks]);
}
function addToPicks(arr,picks) {
if (picks.indexOf(arr[0]) === -1) {
picks.push(arr[0])
return picks
}
arr.shift();
return addToPicks(arr,picks);
}
您也可以在shuffleArray函数中执行此检查。
顺便说一句,不是调用你的shuffleArray函数,而是去看看Math.random's documentation.,这里有一个函数,它在两个数字之间生成一个随机整数,这可能比打乱一个数组更有帮助。
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
https://stackoverflow.com/questions/50915727
复制相似问题