Estoy entrenando en kata de CodeWars que se puede encontrar aquí https://www.codewars.com/kata/56747fd5cb988479af000028/train/javascript
No pude entender otras soluciones. Mi intento es este:
const getMiddle = (s) => { let middle = "" for(let i = 0; i < s.length; i++) { if(s.length % 2 === 1) {middle = s[s.length-1/2]} if(s.length % 2 === 0) {middle = s[s.length-1/2-1] + s[s.length-1/2]} } return middle }Estás haciendo esto mucho más complicado de lo que debe ser.
No necesita un bucle, ya que la longitud no depende de i .
En lugar de comprobar si la longitud es par o impar, puedes simplemente dividir por 2 y redondear hacia abajo.
function getMiddle(s) { return Math.floor(s.length / 2); }s.length / 2 devolverá el número en floating point si la longitud de s es impar
console.log(5 / 2); console.log(6 / 2); Tienes que analizarlo para int usando parseInt , o hay un atajo que puedes usar como
(s.length / 2 - 1) | 0 const a = 5 / 2; console.log(parseInt(a)); console.log(a | 0); const getMiddle = (s) => { let middle = ""; if (s.length % 2 === 1) middle = [s[(s.length / 2) | 0]]; else middle = [s[(s.length / 2 - 1) | 0], s[(s.length / 2) | 0]]; return middle.join(""); }; console.log(getMiddle("A")); console.log(getMiddle("HELMO")); console.log(getMiddle("HELLO0"));No iterar letras. Simplemente puede hacerlo para las longitudes even e odd de cadenas.
const getMiddle = (s) => { return s[Math.floor(s.length/2)] } console.log(getMiddle("abc")); console.log(getMiddle("abcd")); console.log(getMiddle("abcde")); console.log(getMiddle("abcdef")); console.log(getMiddle("abcdefg"));