JavaScript(谷歌脚本)函数有时有效,有时无效:什么';怎么了?

JavaScript(谷歌脚本)函数有时有效,有时无效:什么';怎么了?,javascript,random,google-sheets,Javascript,Random,Google Sheets,我有一个包含值的数组(来自google工作表的值)和两个生成随机值以从数组中拾取值的函数: 随机函数#1: 随机发生器函数#2: 获取随机元素的函数: function generate() { var nom = noms[hasardNombreMax(nombreMax)][hasardSingPlur()]; Logger.log(nom); } 如果我对generate()函数进行一百次测试,它有时会结束并输出100个值,但有时会在随机数个值之后停止 function tes

我有一个包含值的数组(来自google工作表的值)和两个生成随机值以从数组中拾取值的函数:

随机函数#1:

随机发生器函数#2:

获取随机元素的函数:

function generate() {
  var nom = noms[hasardNombreMax(nombreMax)][hasardSingPlur()];
  Logger.log(nom);
}
如果我对generate()函数进行一百次测试,它有时会结束并输出100个值,但有时会在随机数个值之后停止

function test(){
  for(var i = 0 ; i < 100 ; i++){
    Logger.log(generate());
      }
}
奇怪的行为,我真的不明白为什么

编辑:以下是完整的代码:

var ss = SpreadsheetApp.getActive();
var reservoir = ss.getSheetByName("réservoir");
var generateur = ss.getSheetByName("générateur");
var nombreMax = reservoir.getLastRow()-1;

// 0 noms au singulier, 1 noms au pluriel, 2 genre 
// 3 adjectifs (masc. sing.), 4 adjectifs(masc. pluriel), 5 adjectifs (fém. sing), 6 adjectifs (fém. plur.), 
// 7 phrases subordonnées sujet singulier 8 phrases subordonnées sujet au pluriel, 
// 9 groupes prépositionnels, 
// 10 verbes principaux (3e pers. sing), 11 verbes principaux (3e pers. pluriel)
var noms = reservoir.getRange(2, 1, nombreMax, 3).getValues();
var ajectifs = reservoir.getRange(2, 4, nombreMax, 4).getValues();
var pSubs = reservoir.getRange(2, 8, nombreMax, 2);
var grPreps = reservoir.getRange(2, 10, nombreMax, 1).getValues();

function generate() {
  var nom = noms[hasardNombreMax(nombreMax)][hasardSingPlur()];
  Logger.log(nom);
}


// renvoie 1 ou 2 pour choisir si singulier ou pluriel, masculin ou féminin
function hasardSingPlur(){
  var values = [0,1];
  return (values[Math.floor(Math.random()*2)]);
}

// renvoie un nombre au hasard pour choisir un élément au hasard dans le tableau
function hasardNombreMax(){
   return (Math.floor((Math.random() * nombreMax) + 1))
}

function test(){
  for(var i = 0 ; i < 100 ; i++){
    Logger.log(generate());
      }
}
var ss=SpreadsheetApp.getActive();
var水库=ss.getSheetByName(“réServor”);
var Generator=ss.getSheetByName(“générateur”);
var nombreMax=repositor.getLastRow()-1;
//0个单独名称,1个单独名称,2种类型
//3个形容词(masc.sing.),4个形容词(masc.pluriel.),5个形容词(fém.sing),6个形容词(fém.plur.),
//7个词组subordonées sujet singulier 8个词组subordonées sujet au pluriel,
//9组公关人员,
//10个原则性原则(3个原则性原则),11个原则性原则性原则(3个原则性原则)
var noms=reservator.getRange(2,1,nombreMax,3).getValues();
var ajectifs=repositor.getRange(2,4,nombreMax,4).getValues();
var pSubs=水库.getRange(2,8,标称最大值,2);
var grPreps=repositor.getRange(2,10,nombreMax,1).getValues();
函数生成(){
var nom=noms[hasardNombreMax(nombreMax)][hasardSingPlur()];
Logger.log(nom);
}
//第1个或第2个字母是singulier或pluriel,男性是féminin
函数hasardSingPlur(){
var值=[0,1];
返回(值[Math.floor(Math.random()*2)];
}
//请为我们的餐桌上的餐桌命名
函数hasardNombreMax(){
返回值(Math.floor((Math.random()*nombreMax)+1))
}
功能测试(){
对于(变量i=0;i<100;i++){
Logger.log(generate());
}
}

是一个全局变量吗?@Hackerman:是的。我怀疑这是罪魁祸首,我读过一些关于全球VAR的资料,甚至测试了一些东西,以确保我没有做错任何事情。如果generate()函数输出一些值,那么它一定不是因为某些全局范围的原因。是否?附带问题:对于hasardSingPlur?您的索引与该索引的值相同,因此为什么不直接返回您正在生成的索引呢?另外,
noms
定义在哪里?为了完全理解,我添加了整个代码。
function test(){
  for(var i = 0 ; i < 100 ; i++){
    Logger.log(generate());
      }
}
TypeError: Impossible to read property "1.0" from undefined. 
var ss = SpreadsheetApp.getActive();
var reservoir = ss.getSheetByName("réservoir");
var generateur = ss.getSheetByName("générateur");
var nombreMax = reservoir.getLastRow()-1;

// 0 noms au singulier, 1 noms au pluriel, 2 genre 
// 3 adjectifs (masc. sing.), 4 adjectifs(masc. pluriel), 5 adjectifs (fém. sing), 6 adjectifs (fém. plur.), 
// 7 phrases subordonnées sujet singulier 8 phrases subordonnées sujet au pluriel, 
// 9 groupes prépositionnels, 
// 10 verbes principaux (3e pers. sing), 11 verbes principaux (3e pers. pluriel)
var noms = reservoir.getRange(2, 1, nombreMax, 3).getValues();
var ajectifs = reservoir.getRange(2, 4, nombreMax, 4).getValues();
var pSubs = reservoir.getRange(2, 8, nombreMax, 2);
var grPreps = reservoir.getRange(2, 10, nombreMax, 1).getValues();

function generate() {
  var nom = noms[hasardNombreMax(nombreMax)][hasardSingPlur()];
  Logger.log(nom);
}


// renvoie 1 ou 2 pour choisir si singulier ou pluriel, masculin ou féminin
function hasardSingPlur(){
  var values = [0,1];
  return (values[Math.floor(Math.random()*2)]);
}

// renvoie un nombre au hasard pour choisir un élément au hasard dans le tableau
function hasardNombreMax(){
   return (Math.floor((Math.random() * nombreMax) + 1))
}

function test(){
  for(var i = 0 ; i < 100 ; i++){
    Logger.log(generate());
      }
}