Quiero crear una palabra aleatoria de 4 dígitos a partir de esta matriz.
const words = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k'];para eso codifiqué así ...
const word = ( words[Math.floor(Math.random() * 9)] + words[Math.floor(Math.random() * 9)] + words[Math.floor(Math.random() * 9)] + words[Math.floor(Math.random() * 9)] ); console.log(word) // afab Para esto, necesito repetir las words[Math.floor(Math.random() * 9)] nuevamente si necesito 6 dígitos o 10 dígitos.
¿Cómo puedo escribir el código usando una variable que es fácil de generar palabras aleatorias de N dígitos sin repetir el código?
Gracias por adelantado
Puede hacer uso de Array.from y obtener la palabra de length de longitud
Array.from({ length }, () => arr[Math.floor(Math.random() * arr.length)]).join("")Crea una longitud dinámica usando
arr.length // instead of 9(Don't hardcode) const words = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "k"]; function generateRandomWord(arr, length) { return Array .from({ length },() => arr[Math.floor(Math.random() * arr.length)]) .join(""); } console.log(generateRandomWord(words, 4)); console.log(generateRandomWord(words, 8)); console.log(generateRandomWord(words, 12)); function recursiveRandomWord(words, len) { if (len == 0) { return ''; } return words[Math.floor(Math.random() * words.length)] + recursiveRandomWord(words, len - 1); } const words = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k']; for (let i = 0; i < 10; i++) { let length = Math.floor(Math.random() * 5) + 4; console.log(`Length ${length}, Word: ${recursiveRandomWord(words, length)}`); } const words = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k']; function randomWord(arr, len) { let result = []; for (let i = 0; i < len; i++) { result.push( words[ Math.floor(Math.random() * words.length) ] ); } return result.join(''); } for (let i = 0; i < 10; i++) { let length = Math.floor(Math.random() * 5) + 4; console.log(`Length ${length}, Word: ${randomWord(words, length)}`); }Nota: funcionará en navegadores más antiguos, por ejemplo: Internet Explorer 6
Este es un enfoque funcional. Primero llama a pasar la matriz de destino para elegir elementos, luego la siguiente llamada es la cantidad.
const numbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']; const words = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k']; function randomNum(target) { const newRandomNum = (num = 1, val = "") => { val += (target[Math.floor(Math.random() * 9)]) if (num === 1) return val; return newRandomNum(--num, val); } return newRandomNum; } console.log(randomNum(numbers)(5)); console.log(randomNum(numbers)(10)); console.log(randomNum(words)(5)); console.log(randomNum(words)(10));Una mejora que podría hacer es verificar el tipo de matriz de destino, luego usar += para cadenas y otro método para números, ya que no desea agregarlos.