Actualmente estoy aprendiendo los fundamentos de JavaScript, pero me doy cuenta de que hay lagunas definitivas en mi conocimiento. Recientemente comencé a intentar desafíos en Codewars cuando este problema se hizo mucho más evidente. Mi última lucha ha sido intentar que este 'bucle for' inserte caracteres en una serie de números para formatearlo como un número de teléfono. Tantas soluciones diferentes como he probado, ninguna de ellas realmente hace lo que estoy tratando de lograr. Cualquier ayuda para averiguar exactamente dónde me estoy equivocando aquí y qué agujeros hay en mi lógica sería apreciada. Mi mejor intento es este:
const createPhoneNumber = (phoneNumber) => { let formattedNumber = []; formattedNumber.push(phoneNumber) for (let i = 0; i < formattedNumber.length; i++) { if (formattedNumber[i] === 0) { formattedNumber.push('(') } if (formattedNumber[i] === 2) { formattedNumber.push(')') } if (formattedNumber[i] === 5) { formattedNumber.push('-') } } return(formattedNumber.toString()); } console.log(createPhoneNumber(1234567890));
Algunos comentarios:
formattedNumber.push(phoneNumber)
y luego lo recorre, por lo que solo hay una iteraciónformattedNumber[i] === 0
está comparando el valor con 0
(esta verificación falla y es por eso que su función devuelve el número de teléfono sin formato) pero desea comparar el índice , así que cámbielo a i === 0
toString()
para volver a unir los caracteres, pero esto incluirá comas entre los valores, en su lugar use .join('')
const createPhoneNumber = (phoneNumber) => { const phoneNumberStr = (phoneNumber).toString(); let formattedNumber = []; for (let i = 0; i < phoneNumberStr.length; i++) { if (i === 0) { formattedNumber.push('(') } if (i === 2) { formattedNumber.push(')') } if (i === 5) { formattedNumber.push('-') } formattedNumber.push(phoneNumberStr[i]); } return(formattedNumber.join('')); }; console.log(createPhoneNumber(1234567890))
Además, puede usar .reduce()
para lograr lo mismo, es una función conveniente que itera a través de una matriz y pasa un valor de una iteración a la siguiente:
const createPhoneNumber = (phoneNumber) => (phoneNumber).toString().split('').reduce((acc, char, i) => { let pre = ''; if (i == 0) { pre = '('; } if (i == 2) { pre = ')'; } if (i == 5) { pre = '-'; } return `${acc}${pre}${char}`; }, ''); console.log(createPhoneNumber(1234567890));
Por cierto, creo que su pregunta fue rechazada porque no proporcionó un resultado esperado o más detalles del error 😉