He buscado mucho pero no he encontrado exactamente lo que estoy tratando de hacer. Pero aquí va:
Quiero ingresar una oración / cadena en javascript y generar todas las variaciones aleatorias de esa oración.
Ejemplo de entrada: 'mi oración de prueba 123' salida: 'prueba mi oración 123', 'mi oración 123 prueba', '123 oración mi prueba', y así sucesivamente, y se detiene cuando no quedan variaciones.
Dividí la oración en palabras en una matriz, pero estoy un poco atascado sobre cómo proceder para aleatorizar las palabras y unirlas a nuevas oraciones en una lista o nueva matriz.
código hasta ahora:
let str = "my test sentence 123"; let words = str.split(" "); for (let i = 0; i < words.length - 1; i++) { words[i] += " "; }Un poco atascado en cómo proceder. Mi proceso de pensamiento es: tengo las palabras variable / matriz, pero necesito aleatorizar cada palabra, generar nuevas cadenas pero también verificar las existentes para no duplicar ninguna de ellas.
Gracias por toda la ayuda que pueda obtener para aprender más :)
Verifique este código
var phrase = "my test sentence 123"; var words = phrase.toLowerCase().match(/\w+/g); var wordsCopy = phrase.toLowerCase().match(/\w+/g); // First of all I loop each word words.forEach(function(word, index){ // Random word going to contain my randomized word var randomWord = word; // Copy the entire phrase var wordsMissing = wordsCopy.slice(); // Remove the current word wordsMissing.splice(wordsCopy.indexOf(word), 1); // Loop tru my missing words for (var i = 0; i < wordsMissing.length; i++) { // Set my random word with the rest of the words randomWord += " " + wordsMissing.join(" "); // get the first word and send to the final of my original phrase var firstWord = wordsMissing.splice(0,1)[0]; wordsMissing.push(firstWord); // Log my random word console.log(randomWord); // Reset random word to the initial word randomWord = word; } });Como está en Javascript, usar .join(' ') será más fácil para crear una cadena a partir de una matriz.
Luego, hay muchas soluciones para lograr lo que desea hacer, la forma más fácil sería un foreach en foreach, donde simplemente prueba si la cadena que creó ya existe en la matriz.
Sería la forma más fácil, pero cuantos más elementos coloques, más energía necesitarás, así que usa esta solución con prudencia.
Algo como esto puede funcionar:
var stringToSplit = 'I want to split this' var stringSplitted = stringToSplit.split(' ') var arrayOfNewStrings = [] stringSplitted.forEach(word => { var arrayOfString = [] arrayOfString.push(word) stringSplitted.forEach(otherWord => { if(word !== otherWord) arrayOfString.push(otherWord) }) arrayOfNewStrings.push(arrayOfString) }); console.log(arrayOfNewStrings)Luego debe agregar una capa de for/foreach para cada palabra (esto funcionará solo para la primera) y probar si la matriz ya existe en ArrayOfNewStrings para evitar la duplicación.