He estado tratando de convertir la entrada de texto al caso adecuado y al caso de la oración. El caso apropiado parece funcionar bien, pero el caso de la oración arroja Uncaught TypeError: Cannot read properties of undefined (reading 'toUpperCase') . Revisé esta publicación y apliqué algunos cambios, pero no tuve suerte. Sorprendentemente, .toUpperCase() funciona bien en la función de mayúsculas y minúsculas adecuada.
document.getElementById("proper-case").addEventListener("click", function() { let words = document.querySelector("textarea").value.split(" "); let string = ""; for (let i = 0; i < words.length; i++) { string += words[i][0].toUpperCase() + words[i].substring(1).toLowerCase(); if (i != words.length - 1) { string += " "; } } document.querySelector("textarea").value = string; }); document.getElementById("sentence-case").addEventListener("click", function() { let sentences = document.querySelector("textarea").value.split("."); let string = ""; console.log(sentences); for (let i = 0; i <= sentences.length - 1; i++) { if (i == 0) { string += sentences[i][0].toUpperCase() + sentences[i].substring(1).toLowerCase() + "."; } else { string += " " + sentences[i][1].toUpperCase() + sentences[i].substring(2).toLowerCase() + "."; } } console.log(string) document.querySelector("textarea").value = string; }) <textarea></textarea> <button id="proper-case">Proper Case</button> <button id="sentence-case">Sentence Case</button>¿Puede alguien decirme cuál es el problema aquí?
La operación .split('.') devuelve una cadena vacía en su último elemento de la matriz, por lo tanto, las sentences[i][1] no están definidas. Para resolver esto, puede verificar si las oraciones [i] no son una cadena vacía.
Además, puede usar String.trimLeft() en el caso else.
Esta línea provoca el error.
string += " " + sentences[i][1].toUpperCase() + sentences[i].substring(2).toLowerCase() + ".";
su división separa la cuerda en un punto. si no hay nada después del punto, también hay un elemento vacío en la matriz. y es por eso que el [0] arroja un error. porque una cadena lerrer no tiene un primer carácter. para corregir el error, primero debe detectar este caso.
por ejemplo
document.getElementById("sentence-case").addEventListener("click", function() { let sentences = document.querySelector("textarea").value.split("."); let string = ""; console.log('=>', sentences); for (let i = 0; i <= sentences.length - 1; i++) { if (i == 0) { string += sentences[i][0].toUpperCase() + sentences[i].substring(1).toLowerCase() + "."; } else { console.log(sentences[i][1]); let s1 = '' let s3 = '' if(typeof sentences[i][0] !== "undefined") { s1 = " " + sentences[i][0].toUpperCase(); s3 = "."; } string += s1 + sentences[i].substring(2).toLowerCase() + s3; } } console.log(string) document.querySelector("textarea").value = string; })