Может ли кто-нибудь сказать мне, как я могу реорганизовать этот метод или просто дать мне представление о том, что я должен изменить? Идея состоит в том, чтобы создать функцию для изменения имени авторов, потому что я всегда получаю имена в верхнем регистре, и мне нужна только первая буква и исключать (имена на испанском языке) "де", "эль", "ла" и "'","-", которые также иногда используются.
methods: {
nameAuthor (v) {
const author = v.toLowerCase().split(' ')
const exceptions = ["'", '-', 'y', 'de', 'la']
const longitud = exceptions.length
for (let i = 0; i < author.length; i++) {
for (let u = 0; u < longitud; u++) {
if (!exceptions.includes(author[i])) {
author[i] = author[i].charAt(0).toUpperCase() + author[i].substring(1)
}
}
if (author[i].includes(exceptions[0])) {
const especialCharacter = author[i].split("'")
author[i] = especialCharacter[0] + "'" + especialCharacter[1].charAt(0).toUpperCase() + especialCharacter[1].substring(1)
}
if (author[i].includes(exceptions[1])) {
const especialCharacter = author[i].split('-')
author[i] = especialCharacter[0] + '-' + especialCharacter[1].charAt(0).toUpperCase() + especialCharacter[1].substring(1)
}
}
return author.join(' ')
}
}
Заранее спасибо.
Я бы разделил ее на три подзадачи.
Ответ на первую задачу здесь и дает вам следующую функцию:
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
function capitalizeEachWord(phrase) {
return phrase.split("'").map(capitalizeFirstLetter).join("'")
.split("-").map(capitalizeFirstLetter).join("-")
.split(" ").map(capitalizeFirstLetter).join(" ");
}
Вторую проблему теперь можно решить с помощью следующей функции (при условии, что перед и после специальных частей имени всегда есть пробелы):
function lowerCaseSpecialNameParts (name) {
return name.replace(" De ", " de ")
.replace(" La ", " la ")
.replace(" El ", " el ");
}
Теперь вы можете комбинировать их оба в своей функции:
methods: {
nameAuthor (v) {
return lowerCaseSpecialNameParts(capitalizeEachWord(v.toLowerCase()));
}
}