por qué me está dando el primer índice y necesito la salida a continuación que es "¡Deja de hacer memes de Bob Esponja!"
function spongeMeme(sentence) { let x = sentence.split(""); for(let i = 0; i < sentence.length;i+=2){ return x[i].toUpperCase() } } console.log(spongeMeme("stop Making spongebob Memes!")) // S // output : StOp mAkInG SpOnGeBoB MeMeS!"Prueba esto:
function spongeMeme(sentence) { let x = sentence.split(""); let newSentence = ''; for(let i = 0; i < sentence.length;i++){ // If the letter is even if(i % 2 ==0) { newSentence += x[i].toUpperCase(); } // If the letter is odd else { newSentence += x[i].toLowerCase(); } } return newSentence } console.log(spongeMeme("stop Making spongebob Memes!"))En primer lugar, solo puede devolver una vez por función, por lo que debe crear una variable y almacenar toda la letra nueva dentro y, al final, devolver esta variable.
Está devolviendo solo la primera letra de lo que está almacenado dentro de x. Intenta depurarlo y ver qué está pasando.
La forma en que lo haría es así:
function spongeMeme(sentence) { return sentence.split("") .map((s, i) => (i % 2 != 0 ? s.toUpperCase() : s)) .join(""); } console.log(spongeMeme("stop Making spongebob Memes!"));Inmediatamente regresa en la primera iteración de su ciclo for, de ahí la razón por la que solo obtiene una sola letra.
Comencemos arreglando su código existente:
function spongeMeme(sentence) { let x = sentence.split(""); for(let i = 0; i < sentence.length; i+=2) { // You can't return here. Update the value instead. return x[i].toUpperCase() } // Join your sentence back together before returning. return x.join(""); } console.log(spongeMeme("stop Making spongebob Memes!"))Eso funcionará, pero podemos limpiarlo. ¿Cómo? Haciéndolo más declarativo con map.
function spongeMeme(sentence) { return sentence .split('') // convert sentence to an array .map((char, i) => { // update every other value return (i % 2 === 0) ? char.toUpperCase() : char.toLowerCase(); }) .join(''); // convert back to a string }