Estoy tratando de resolver un problema: Dada una cadena hecha de dígitos [0-9], devuelve una cadena donde cada dígito se repite un número de veces igual a su valor. Hice la repetición de números, cómo sigue, no lo sé.
function explode(s) { for (let i=0; i < s.length; i++){ let y = s[i].repeat(s[i]); console.log(y); } }
Javascript es bueno para forzar números a una cadena y viceversa, pero prefiero dejar en claro cuándo un carácter numérico se trata como un número y cuándo se pretende que sea una cadena.
Mi fragmento prueba el procesamiento de números, representaciones de cadenas de números, cadenas que tienen mezclas de caracteres de números y letras, y cadenas de letras.
hace uso de array.split()
para la matriz de caracteres, array.map()
para procesar los caracteres (incluido parseInt
para cambiar formalmente el carácter a un número cuando se usa como argumento string.repeat()
y array.join()
para devolver la cadena numérica deseada después del procesamiento:
let number = 6789; let numberString = "12345"; let badNum = "3bad2Number"; let noNum = "justLetters"; console.log(expandNums(number)); console.log(expandNums(numberString)); console.log(expandNums(badNum)); console.log(expandNums(noNum)); function expandNums(numOrString) { let numString = numOrString.toString(); let chars = numString.split(''); let processed = chars.map(char => char.repeat(parseInt(char))); return processed.join(''); } // end function expandNums
La función funciona bien en todas las situaciones de uso probadas, por lo que es poco probable que arroje un error si se pasa un argumento incorrecto. También hace un buen trabajo con el ejemplo mixto de letras y números.
Solo te faltaba una cadena de resultados para recopilar las partes.
function explode(input) { let result = ''; let s = input.toString(); // So that input can also be a number for (let i=0; i < s.length; i++){ let y = s[i].repeat(s[i]); result += y; } return result; }