Estoy creando una función APA titleCase, y estoy tratando de descubrir cómo escribir en mayúsculas palabras no importantes (the, a, an, etc.). Hasta ahora solo he descubierto cómo poner en mayúsculas o minúsculas todas las palabras pequeñas, incluso las palabras pequeñas que deben escribirse en mayúscula. Estoy tratando de mantener en mayúsculas las palabras pequeñas que no son palabras sin importancia. Por ejemplo, la primera palabra de un título, y palabras seguidas de dos puntos y guión para nombrar algunas. Si un objeto de título de "este título es un título de ejemplo para Javascript: volumen uno" se pasa a la función, necesito que regrese como "Este título es un título de ejemplo para JavaScript: volumen uno". ¿Alguien puede ayudar a mantener las palabras pequeñas en minúsculas?
function titleCase(title) { title.toLowerCase(); var smallWords = ['a', 'an', 'and', 'as', 'at', 'but', 'by', 'en', 'for', 'if', 'in', 'nor', 'of', 'on', 'or', 'per', 'the', 'to']; var titleSplit = title.split(' '); for (var i = 0; i < titleSplit.length; i++) { if (titleSplit[i] === titleSplit[0]) { titleSplit[i] = titleSplit[i].charAt(0).toUpperCase() + titleSplit[i].slice(1); } else if (titleSplit[i] === 'api' || titleSplit[i] === 'Api') { titleSplit[i] = 'API'; } else if (titleSplit[i] === 'javascript' || titleSplit[i] === 'Javascript') { titleSplit[i] = 'JavaScript'; } else if (smallWords.includes(titleSplit[i])) { titleSplit[i] = titleSplit[i].toLowerCase(); } } title = titleSplit.join(' '); title = title.replace(/(?:^|[\s-/])\w/g, match => { return match.toUpperCase(); }); console.log('title:', title); return title; }Así es como lo hago.
const titleCase = string => { const doNotCapitalize = ['a', 'an', 'the', 'at', 'by', 'for', 'in', 'of', 'on', 'to', 'up', 'and', 'as', 'but', 'or', 'nor']; const words = string.split(' '); // array const numOfWords = words.length - 1; return string .toLowerCase() .split(' ') .map((word, i) => { // capitalize the first and last word regardless if (i === 0 || i === numOfWords) { return word.replace(word[0], word[0].toUpperCase()); } return doNotCapitalize.includes(word) ? word : word.replace(word[0], word[0].toUpperCase()); }) .join(' '); };