Estoy intentando tomar una cadena dada y reemplazar un número dado en esa cadena con un carácter. Específicamente:
(este es un ejercicio de Kata )
He escrito una función que debería:
Mi código es el que aparece a continuación.
Function correct(string) { let array = string.split('') for (let i = 0; i < array.length; i++) { array[i].replace('5', 'S') array[i].replace('0', 'O') array[i].replace('1', 'I') } return array.join(''); } La función devuelve la cadena exactamente como se proporcionó inicialmente, sin cambios. Sospecho que mi problema es la forma en que usé el método .replace() dentro del bucle, o las posiciones de índice declaradas.
String.prototype.replace devuelve una nueva cadena y no muta la variable en la que se ejecutó. Es por eso que necesita asignar el resultado del reemplazo en alguna parte.
Para arreglar su código, simplemente haga lo siguiente con cada reemplazo:
array[i] = array[i].replace('5', 'S'); Nota 1: dado que array[i] es siempre un solo carácter, no hay necesidad de replace , porque puede comparar así:
if (array[i] === '5') { array[i] = 'S'; }o una sola línea:
array[i] = array[i] === '5' ? 'S' : array[i]; Nota 2: el bucle for para un reemplazo no es un código limpio. JavaScript es muy flexible y proporciona soluciones mucho mejores al problema. P.ej. String.prototype.replaceAll .
Puede hacerlo con una simple expresión regular replace() en función de su clave => valor como este,
const key_to_replace = { '5': 'S', '1': 'I', '0': 'O' } const correct = (str) => str.replace(/./g, (m) => key_to_replace[m] ?? m); console.log(correct("this 5is a0 test1 with 55abc"))Prueba esto :
const inputStr = 'AB5DE0G1H'; function correct(string) { return string.replaceAll('5', 'S').replaceAll('0', 'O').replaceAll('1', 'l') } console.log(correct(inputStr));