Como dice el título, necesito hacer una función que haga que cada segunda palabra en una oración esté en mayúscula, pero no toque otras palabras. Tengo esta función: (La primera si es en un caso solo hay una palabra)
Y hace su trabajo, sin embargo, con una oración como esta "ESTA ES UNA ORACIÓN" devuelve "ESTA ES UNA ORACIÓN", mientras que necesito "ESTA ES UNA ORACIÓN".
function largeLetters(sentence) { return sentence.map((v, i) => i % 2 == 0 ? v.toLowerCase() : v.toUpperCase()).join(' '); } function sentenceToUpperCase(sentence) { sentence = sentence.split(' '); if (sentence.length == 1) { sentence = sentence.toString().toUpperCase(); return sentence; } else { return largeLetters(sentence) }; }; console.log(sentenceToUpperCase("ThIs iS A seNteNCe"))He simplificado un poco tu programa.
El problema estaba en esta parte:
i % 2 == 0 ? word.toLowerCase() : word.toUpperCase()
no necesita cambiar todas las demás palabras a minúsculas, simplemente déjelo como está:
i % 2 == 0 ? word : word.toUpperCase()
function sentenceToUpperCase(sentence) { return sentence .split(' ') .map((word, i) => i % 2 == 0 ? word : word.toUpperCase()) .join(' '); }; console.log(sentenceToUpperCase("ThIs")) console.log(sentenceToUpperCase("ThIs iS")) console.log(sentenceToUpperCase("ThIs iS A")) console.log(sentenceToUpperCase("ThIs iS A seNteNCe"))Cuando tu dices
eso pondría cada segunda palabra en una oración en mayúscula
Si quiere decir 'valor par', use el value % 2 === 0 ; de lo contrario, simplemente cambie el segundo valor de su matriz.
Actualizar incluso palabras:
function sentenceToUpperCase(sentence) { const words = sentence.split(' '); if(words.length >= 2) { return words.map((v,i) => i % 2 === 0 ? v : v.toUpperCase()).join(' '); } else { return sentence.toUpperCase(); } }Actualizar solo la segunda palabra:
function sentenceToUpperCase(sentence) { const words = sentence.split(' '); if(words.length >= 2) { words[1] = words[1].toUpperCase(); } else { return sentence.toUpperCase(); } return words.join(' '); }Puedes 'minificarlo' usando un ternario y un mapa
function sentenceToUpperCaseMinify(sentence) { const words = sentence.split(' '); return words.length >= 2 ? words.map((v, i) => i === 1 ? v.toUpperCase() : v).join(' ') : sentence.toUpperCase(); }Buena pregunta y en JS tienes muchas formas de hacerlo. Las funciones que he usado son: minúsculas, dividir, mayúsculas, unir. Envolví en una función.
const str = "this IS a SENTENCE" function build(str) { const s = str.split(' '); // or use (str.toLowerCase()).split(' ') if every odd word have to be lowercase let r = []; let i = 0; s.forEach((e) => { if (i % 2 === 0) { r.push(e) } else { r.push(e.toUpperCase()) } i++; }) return r.join(' '); } console.log('new Sentense: ', build(str) );