The following script is a random first and last name generator that works perfectly. The problem is that it randomly tells me that 'str' is not defined.
Can someone explain to me what is happening and how to fix it?
function capFirst(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
function generateName(sexo){
let hombre = ["antonio","jose","manuel","francisco","david","juan","javier","daniel"];
let mujer = ["maria carmen","maria","carmen","josefa","ana maria","isabel","maria pilar","maria dolores","laura","maria teresa","ana","cristina"];
let apellidos = ["garcia","gonzalez","rodriguez","fernandez","lopez","martinez","sanchez","perez","gomez","martin","jimenez","ruiz","hernandez","diaz","moreno","muñoz","alvarez","romero","alonso","gutierrez","navarro","torres","dominguez","vazquez","ramos","gil","ramirez","serrano","blanco","molina","morales","suarez","ortega","delgado","castro","ortiz","rubio","marin","sanz","nuñez","iglesias","medina","garrido","cortes","castillo","santos","lozano","guerrero","cano","prieto","mendez","cruz","calvo","gallego","herrera","marquez","leon","vidal","peña","flores","cabrera","campos","vega","fuentes","carrasco","diez","reyes","caballero","nieto","aguilar","pascual","santana","herrero","montero","lorenzo","hidalgo","gimenez","ibañez","ferrer","duran","santiago","benitez","vargas","mora","vicente","arias","carmona","crespo","roman","pastor","soto","saez","velasco","moya","soler","parra","esteban","bravo","gallardo","rojas"]
let nombre;
if (sexo == 'h')
nombre = capFirst(hombre[getRandomInt(0, hombre.length + 1)]);
else if (sexo == 'm')
nombre = capFirst(mujer[getRandomInt(0, mujer.length + 1)]);
else {
if (getRandomInt(0,2) == 1)
nombre = capFirst(hombre[getRandomInt(0, hombre.length + 1)]);
else
nombre = capFirst(mujer[getRandomInt(0, mujer.length + 1)]);
}
nombre += ' '+capFirst(apellidos[getRandomInt(0, apellidos.length + 1)])+ ' ' + capFirst(apellidos[getRandomInt(0, apellidos.length + 1)]);
return nombre;
}
for (let i = 0; i <= 100; i++) {
console.log(i+': '+generateName());
}
The problem is in the lines:
It may be the case that an attempt is made to access the position
hombre.length+1
of the arrayhombre
, for example, and this isundefined
because it does not exist, and therefore, it cannot be executed.charAt