Je suis censé écrire une fonction qui prend un caractère (c'est-à-dire une chaîne de longueur 1) et renvoie true si c'est une voyelle, false sinon. Je suis venu avec deux fonctions, mais je ne sais pas laquelle est la plus performante et quelle voie je devrais préférer. Celui avec RegEx est beaucoup plus simple mais je ne sais pas si je devrais essayer d'éviter d'utiliser RegEx ou non.
Ma tentative sans RegEx:
function isVowel(char)
{
if (char.length == 1)
{
var vowels = new Array('a','e','i','o','u');
var isVowel = false;
for(e in vowels)
{
if(vowels[e] == char)
{
isVowel = true;
}
}
return isVowel;
}
}
Avec RegEx:
function isVowelRegEx(char)
{
if (char.length == 1)
{
return /[aeiou]/.test(char);
}
}
Je pense que vous pouvez en toute sécurité dire qu'une boucle est plus rapide.
J'admets qu'une expression rationnelle semble plus propre en termes de code. Si c'est un véritable goulot d'étranglement, utilisez une boucle for, sinon restez avec l'expression habituelle pour des raisons "d'élégance"
Si vous voulez aller pour la simplicité alors utilisez simplement
function isVowel(c) {
return ['a', 'e', 'i', 'o', 'u'].indexOf(c.toLowerCase()) !== -1
}
Perdu de réponses ici, la vitesse n’est pas pertinente pour de telles petites fonctions, à moins que vous ne les appeliez quelques centaines de milliers de fois sur une courte période. Pour moi, une expression régulière est préférable, mais gardez-la dans une fermeture pour ne pas la construire à chaque fois:
Version simple:
function vowelTest(s) {
return (/^[aeiou]$/i).test(s);
}
Version plus efficace:
var vowelTest = (function() {
var re = /^[aeiou]$/i;
return function(s) {
return re.test(s);
}
})();
Retourne true
si s
est une voyelle unique (majuscule ou minuscule) et false
pour tout le reste.
cycles, tableaux, regexp ... pour quoi? Cela peut être beaucoup plus rapide :)
function isVowel(char)
{
return char === 'a' || char === 'e' || char === 'i' || char === 'o' || char === 'u' || false;
}
C’est une fonction RegExp approximative que j’aurais trouvée
function isVowel(char) {
return /^[aeiou]$/.test(char.toLowerCase());
}
Ce qui signifie, if (char.length == 1 && 'aeiou' is contained in char.toLowerCase()) then return true
.
Personnellement, je le définirais ainsi:
function isVowel( chr ){ return 'aeiou'.indexOf( chr[0].toLowerCase() ) !== -1 }
Vous pouvez également utiliser ['a','e','i','o','u']
et ignorer le test de longueur, mais vous créez alors un tableau chaque fois que vous appelez la fonction. (Il y a moyen de reproduire cela via des fermetures, mais celles-ci sont un peu obscures à lire)
function isVowel(char)
{
if (char.length == 1)
{
var vowels = "aeiou";
var isVowel = vowels.indexOf(char) >= 0 ? true : false;
return isVowel;
}
}
Fondamentalement, il vérifie l'index du caractère dans la chaîne de voyelles. Si c'est une consonne et non dans la chaîne, indexOf
retournera -1.
function findVowels(str) {
return (str.match(/[aeiou]/ig)||[]);
}
findVowels('abracadabra'); // 'aaaaa'
Fondamentalement, il renvoie toutes les voyelles dans une chaîne donnée.