J'essaie de capitaliser le premier caractère de tous les mots de la chaîne.
condition 1. Il existe des mots exclus tels que:
'de', 'le' code> qui ne devrait pas BlockQuote>
Voici mon code: P>
p>
const movieTitleFormatter = title => { if(!title) { return ''; } let arr = []; let exludeWords = ['of', 'the'] arr = title.split(' '); return arr.map(word => { return exludeWords.includes(word) ? [word] : word.charAt(0).toUpperCase() + word.slice(1); }).join(' '); } console.log(movieTitleFormatter('psycho')); //'Psycho'; console.log(movieTitleFormatter('silence of the lambs')); //'Silence of the Lambs'; console.log(movieTitleFormatter('the last emperor')); //'The Last Emperor'; //Here is shows wrong. console.log(movieTitleFormatter()); //'';
6 Réponses :
capitaliser le premier caractère du premier mot avant foreach () code>
const movieTitleFormatter = title => {
if(!title) {
return '';
}
let arr = [];
let exludeWords = ['of', 'the']
arr = title.split(' ');
arr[0] = arr[0].charAt(0).toUpperCase() + arr[0].slice(1);
return arr.map(word =>
{
return exludeWords.includes(word) ? [word] : word.charAt(0).toUpperCase() + word.slice(1);
}).join(' ');
}
console.log(movieTitleFormatter('psycho')); //'Psycho';
console.log(movieTitleFormatter('silence of the lambs')); //'Silence of the Lambs';
console.log(movieTitleFormatter('the last emperor')); //'The Last Emperor'; //Here is shows wrong.
console.log(movieTitleFormatter());
Y a-t-il un problème avec cette approche? Pourquoi le bowvote?
ajoutez simplement une autre condition pour vérifier l'index em> du mot: p> const movieTitleFormatter = title => {
if(!title) {
return '';
}
let arr = [];
let exludeWords = ['of', 'the']
arr = title.split(' ');
return arr.map((word, i) =>
{
return exludeWords.includes(word) && i!=0 ? [word] : word.charAt(0).toUpperCase() + word.slice(1);
}).join(' ');
}
console.log(movieTitleFormatter('psycho')); //'Psycho';
console.log(movieTitleFormatter('silence of the lambs')); //'Silence of the Lambs';
console.log(movieTitleFormatter('the last emperor')); //'The Last Emperor'; //Here is shows wrong.
console.log(movieTitleFormatter()); //'';
La méthode code> mappe code> a un deuxième paramètre qui porte l'index de l'élément dans la matrice. Connaître cela, vous pouvez utiliser ce qui suit
p>
let movieTitleFormatter = title => { if(!title) { return ''; } let arr = []; let exludeWords = ['of', 'the'] arr = title.split(' '); return arr.map((word, index) => { return exludeWords.includes(word) && index !=0 ? [word] : word.charAt(0).toUpperCase() + word.slice(1); }).join(' '); } console.log(movieTitleFormatter('the last emperor')); //'The Last Emperor'; //Here is shows wrong. console.log(movieTitleFormatter('silence of the lambs')); //'Silence of the Lambs';
Votre état est incomplet. Vous excluez le mot même si c'est le premier mot de la phrase. Vous devez vérifier l'index du mot. Lorsque vous utilisez la carte, vous pouvez ajouter le paramètre d'index optionnel:
https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_Objects/array/map#syntax p>
p>
const movieTitleFormatter = title => { if(!title) { return ''; } let arr = []; let exludeWords = ['of', 'the'] arr = title.split(' '); return arr.map((word,idx) => { return (exludeWords.includes(word) && idx !==0) ? [word] : word.charAt(0).toUpperCase() + word.slice(1); }).join(' '); } console.log(movieTitleFormatter('psycho')); //'Psycho'; console.log(movieTitleFormatter('silence of the lambs')); //'Silence of the Lambs'; console.log(movieTitleFormatter('the last emperor')); //'The Last Emperor'; //Here is shows wrong. console.log(movieTitleFormatter()); //'';
Voici une approche alternative utilisant la méthode p> .replace () code> avec une fonction de remplacement comme deuxième argument. L'expression régulière correspond à toutes les chaînes de caractères de mots séparées par des limites de mots et les capitalise en fonction de la question de savoir si elle est ou non dans le tableau
d'exclutwords code> tableau:
const cap = str => str.charAt(0).toUpperCase() + str.slice(1);
const movieTitleFormatter = (title = '') => {
const exludeWords = ['of', 'the']
return cap(
title.replace(/\b\w+\b/g, m => exludeWords.includes(m) ? m : cap(m))
);
}
console.log(movieTitleFormatter('psycho')); // 'Psycho';
console.log(movieTitleFormatter('silence of the lambs')); // 'Silence of the Lambs';
console.log(movieTitleFormatter('the last emperor')); // 'The Last Emperor';
console.log(movieTitleFormatter()); // '';
juste pour plus de clarté, vous voulez qu'il tourne Si tel est le cas, je vous suggère d'ajouter le deuxième paramètre de la carte, qui est l'index (pour plus d'informations, voir Votre extrait votre extrait ressemblerait à ceci: p> Cela devrait faire ce que vous voulez faire, mais je recommanderais d'utiliser Regex pour quelque chose comme ça. P> P> 'le dernier empereur' code> à
'le dernier empereur' code> et non sur
"le dernier empereur" code " >, non?
Tout comme une curiosité concernant la vérité / FALSY: vous avez 3 réponses jusqu'à présent suggérant
&& i! == 0 code>. Il peut être juste
&& i code>, puisque tous les indices sauf 0 sont de la vérité.
Vous avez raison. :)