Básicamente, tengo dos matrices de elementos de matriz relacionados, donde un elemento se elige al azar.
Quiero imprimir el elemento relacionado de la segunda matriz. Digamos que uno tiene una matriz de nombres de trabajo y se ve así:
const jobNames = ["Builder", "Doctor", "Vet"];Luego, uno elige un nombre de trabajo aleatorio como ese:
var randomJobName = jobNames[ Math.floor(Math.random() * jobNames.length) ];Ahora uno tiene otra matriz que, con cada elemento, presenta la descripción de su nombre de trabajo relacionado.
¿Cómo se puede acceder al elemento relacionado desde la segunda matriz si solo se tiene el elemento elegido al azar de la primera matriz?
Si los nombres de los trabajos y las descripciones de los trabajos se combinan, me pregunto por qué están en dos matrices diferentes. Este es un caso de uso perfecto para Objetos. yo lo estructuraria asi
const jobs = [ {name: "Builder", description: "Builds Stuff"}, {name: "Doctor", description: "Heals Stuff"}, {name: "Vet", description: "Heals Stuff but for animals."} ]Usando la desestructuración de objetos para acceder a los valores:
const {name, description} = jobs[Math.floor(Math.random() * jobNames.length)] alert(`Found job: ${name} who ${description}`)Hay básicamente 3 enfoques diferentes.
La más fácil es, como ya sugirió VLAZ , obtener un índice aleatorio una vez y acceder a ambos elementos, cada uno de su matriz mediante este índice aleatorio.
const jobNames = ['Builder', 'Doctor', 'Vet']; const jobDescriptions = [ 'creates/builds things/stuff.', 'tries fixing human health issues.', 'does fix animal health issues.', ]; const randomIdx = Math.floor(Math.random() * jobNames.length); const jobName = jobNames[randomIdx]; const jobDescription = jobDescriptions[randomIdx]; console.log({ jobName, jobDescription }); .as-console-wrapper { min-height: 100%!important; top: 0; }En caso de que el OP no tenga la posibilidad de usar un solo índice aleatorio a la vez y, por lo tanto, se vea obligado a trabajar con el nombre del trabajo ya elegido al azar, entonces el OP necesita encontrar el índice de este mismo nombre de trabajo desde donde el OP puede proceda con la selección de la descripción del trabajo relacionado...
const jobNames = ['Builder', 'Doctor', 'Vet']; const jobDescriptions = [ 'creates/builds things/stuff.', 'tries fixing human health issues.', 'does fix animal health issues.', ]; // OP has no control about how `jobName` is/was/gets chosen. const jobName = jobNames[ Math.floor(Math.random() * jobNames.length) ]; const index = jobNames.indexOf(jobName); const jobDescription = jobDescriptions[index]; console.log({ jobName, jobDescription }); .as-console-wrapper { min-height: 100%!important; top: 0; }En caso de que dicha tarea deba ejecutarse con frecuencia/repetidamente y en caso de que el OP pueda cambiar el código cuando el OP esté satisfecho, un enfoque fue combinar ambas matrices en una matriz de elementos de trabajo agregados (nombre y descripción) y hacer la selección aleatoria una vez de esta nueva estructura de matriz...
const jobNames = ['Builder', 'Doctor', 'Vet']; const jobDescriptions = [ 'creates/builds things/stuff.', 'tries fixing human health issues.', 'does fix animal health issues.', ]; const jobList = jobNames .map(function (name, idx) { const description = this[idx]; return { name, description, }; // `jobDescriptions` applied as }, jobDescriptions); // `map`'s 2nd `thisArg` argument. function getRandomArrayIndex(arr) { return Math.floor(Math.random() * arr.length); } const { name, description, } = jobList[ getRandomArrayIndex(jobList) ]; console.log({ name, description }); console.log({ jobList }); .as-console-wrapper { min-height: 100%!important; top: 0; }