0
votes

Capitaliser chaque premier mot sauf certains

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()); //'';


2 commentaires

Tout comme une curiosité concernant la vérité / FALSY: vous avez 3 réponses jusqu'à présent suggérant && i! == 0 . Il peut être juste && i , puisque tous les indices sauf 0 sont de la vérité.


Vous avez raison. :)


6 Réponses :


0
votes

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());


1 commentaires

Y a-t-il un problème avec cette approche? Pourquoi le bowvote?



2
votes

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()); //'';


0 commentaires

0
votes

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';


0 commentaires

0
votes

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()); //'';


0 commentaires

2
votes

Voici une approche alternative utilisant la méthode .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:

p>

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()); // '';


0 commentaires

0
votes

juste pour plus de clarté, vous voulez qu'il tourne 'le dernier empereur' à 'le dernier empereur' et non sur "le dernier empereur" , non?

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 MDNS DOCU À propos de Array.map () ) Parce que vous pourriez simplement ajouter un chèque si c'est le premier position ou non.

Votre extrait votre extrait ressemblerait à ceci: xxx

Cela devrait faire ce que vous voulez faire, mais je recommanderais d'utiliser Regex pour quelque chose comme ça.


0 commentaires