1
votes

Comment ajouter un espace entre le nom de la clé de cas de chameau?

J'ai créé un site Web node.js sur lequel les employés potentiels peuvent postuler à un emploi. Lorsqu'ils soumettent le formulaire de candidature, j'utilise nodemailer et mailgun pour envoyer un e-mail au responsable du recrutement avec les informations sur les candidats. Il envoie l'objet du nouveau candidat avec les paires clé-valeur, mais je voudrais mettre un espace entre les clés contenant plus d'un mot et les rendre en majuscules pour être un peu plus agréables à regarder. Comment puis-je faire cela?

voici un exemple d'e-mail avec des paires de valeurs de clé de sortie

 entrez la description de l'image ici

Voici le code pour envoi d'un e-mail

function sendAppliedEmail(applicant) {


let html = '<img src="" alt="logo">';
  html += '<h2 style="color: black">New Applicant</h2>'
  html += '<ul>';

  Object.entries(applicant).forEach(([key, value]) => {
    html += `<li>${key}: ${value}</li>`;
  });

  html += '</ul>';


3 commentaires

Voici une réponse sur la conversion de cas de chameau: stackoverflow .com / questions / 7225407 /…


Voulez-vous que le caractère initial soit également mis en majuscule?


stackoverflow.com/questions/18379254/regex-to-split -camel-ca‌ se


3 Réponses :


0
votes

Vous pouvez les couper en majuscules avec une expression régulière. Voir cette question: Javascript Split string on UpperCase Characters


0 commentaires

2
votes
html += `<li>${key.replace(/([a-z])([A-Z])/g, `$1 $2`).toUpperCase()}: ${value}</li>`;

2 commentaires

Beau travail sur la simplicité de cela! Le mien était similaire mais je ne savais pas si le caractère initial devait être mis en majuscule :)


Merci de votre aide! Réponse géniale



4
votes

Vous pouvez utiliser la fonction de remplacement pour vérifier si une lettre est en majuscule et renvoyer un espace préfixé avec le caractère si tel est le cas, tout en vous assurant simultanément que le premier caractère est en majuscule.

function sendAppliedEmail(applicant) {
let splitCase = (key) => key.replace(/[a-z]/gi, (m, o) => (m < "[" && o) ? ` ${m}` : (o) ? m : m.toUpperCase());

let html = '<img src="" alt="logo">';
  html += '<h2 style="color: black">New Applicant</h2>'
  html += '<ul>';

  Object.entries(applicant).forEach(([key, value]) => {
    html += `<li>${splitCase(key)}: ${value}</li>`;
  });

  html += '</ul>';

Brève explication

Vous pouvez déterminer si un caractère est en majuscule ou non en le comparant à {} . Si un caractère est inférieur à , il est en majuscule, et s'il est supérieur à , il est en minuscule. En effet, {} sera transformé en la chaîne [object Object] , et les deux codes de caractères seront comparés. Lors de la comparaison, seul le premier caractère sera utilisé ("["). Ainsi "A" et "A" est équivalent. Ceci est plus facile à expliquer en voyant leurs codes de caractères:

let splitCase = key => key.replace(/[a-z]/gi, (m, o) => (m < "[" && o) ? ` ${m}` : (o) ? m : m.toUpperCase());

let key = "phoneNumber";
console.log(splitCase(key));

key = "firstName";
console.log(splitCase(key));

(En fait, il est plus performant d'utiliser "[", et pour l'optimisation, vous compareriez à cela à la place. C'est simplement plus facile à retenir "{}" est plus grand que les majuscules et vice versa)

Pourquoi faire cela?

Dans RegEx typique, vous pouvez simplement utiliser [AZ] pour saisir les caractères en majuscules, mais la mise en garde est que si vous cherchez à mettre en majuscule le premier caractère ET la casse de l'espace chameau, cette comparaison en plus du paramètre offset (pensez de celui-ci comme index de la chaîne) dans la fonction replace vous permet de le faire dans un passage singulier dans la chaîne.


Un exemple:

"A".charCodeAt(0);
 //65
"[".charCodeAt(0);
 //91
"a".charCodeAt(0);
 //97

Dans votre code:

L'extrait ci-dessous est non fonctionnel , mais il devrait fonctionner dans votre code:

key.replace(/[a-z]/gi, (m, o) => (m < {} && o) ? ` ${m}` : (o) ? m : m.toUpperCase())


0 commentaires