J'utilise JavaScript de base pour compter le nombre de voyelles dans une chaîne. Le code ci-dessous fonctionne, mais j'aimerais le nettoyer un peu. Est-ce que l'utilisation de .includes()
aiderait du tout à considérer qu'il s'agit d'une chaîne? J'aimerais utiliser quelque chose comme string.includes("a", "e", "i", "o", "u")
dans la mesure du possible pour nettoyer l'instruction conditionnelle. Aussi, est-il nécessaire de convertir l'entrée en chaîne?
function getVowels(str) {
var vowelsCount = 0;
//turn the input into a string
var string = str.toString();
//loop through the string
for (var i = 0; i <= string.length - 1; i++) {
//if a vowel, add to vowel count
if (string.charAt(i) == "a" || string.charAt(i) == "e" || string.charAt(i) == "i" || string.charAt(i) == "o" || string.charAt(i) == "u") {
vowelsCount += 1;
}
}
return vowelsCount;
}
Vous pouvez réellement le faire avec une petite regex:
function getVowels(str) {
var m = str.match(/[aeiou]/gi);
return m === null ? 0 : m.length;
}
Cela correspond simplement à l'expression régulière (g
le fait rechercher dans toute la chaîne, i
le rend insensible à la casse) et renvoie le nombre de correspondances. Nous vérifions null
s'il n'y a pas de correspondance (c'est-à-dire pas de voyelles) et retournons 0 dans ce cas.
Convertissez la chaîne en tableau à l'aide de la méthode Array.from()
, puis utilisez la méthode Array.prototype.filter()
pour filtrer le tableau afin qu'il ne contienne que des voyelles, puis la propriété length
contiendra le nombre de voyelles.
const countVowels = str => Array.from(str)
.filter(letter => 'aeiou'.includes(letter)).length;
console.log(countVowels('abcdefghijklmnopqrstuvwxyz')); // 5
console.log(countVowels('test')); // 1
console.log(countVowels('ddd')); // 0
function countVowels(subject) {
return subject.match(/[aeiou]/gi).length;
}
Vous n'avez pas besoin de convertir quoi que ce soit, le traitement des erreurs par Javascript est suffisant pour vous indiquer une fonction aussi simple si cela s'avère nécessaire.
Short et ES6, vous pouvez utiliser la fonction count (str);
const count = str => (str.match(/[aeiou]/gi) || []).length;
Vous pouvez convertir la chaîne donnée en un tableau à l'aide de l'opérateur spread , puis vous pouvez filter()
les caractères uniquement pour ceux qui sont des voyelles.
Ensuite, vous pouvez vérifier la length
du tableau pour obtenir le nombre total de voyelles de la chaîne:
const vowel_count = string => [...string].filter(c => 'aeiou'.includes(c.toLowerCase())).length;
console.log(vowel_count('aaaa')); // 4
console.log(vowel_count('AAAA')); // 4
console.log(vowel_count('foo BAR baz QUX')); // 5
console.log(vowel_count('Hello, world!')); // 3
Utilisez match
mais faites attention car il peut renvoyer un null si aucune correspondance n'est trouvée
const countVowels = (subject => (subject.match(/[aeiou]/gi) || []).length);
count = function(a) {
//var a=document.getElementById("t");
console.log(a); //to see input string on console
n = a.length;
console.log(n); //calculated length of string
var c = 0;
for (i = 0; i < n; i++) {
if ((a[i] == "a") || (a[i] == "e") || (a[i] == "i") || (a[i] == "o") || (a[i] == "u")) {
console.log(a[i]); //just to verify
c += 1;
}
}
document.getElementById("p").innerText = c;
}
<p>count of vowels </p>
<p id="p"></p>
<input id="t" />
<input type="button" value="count" onclick="count(t.value)" />
C'est la solution la plus courte
function getCount(str) {
return (str.match(/[aeiou]/ig)||[]).length;
}
Function vowels(str){
let count=0;
const checker=['a','e','i','o','u'];
for (let char of str.toLowerCase){
if (checker.includes(char)){
count++;
}
return count;
}
Function vowels(str){
const match = str.match(/[aeiou]/gi);
return match ? match.length : 0 ;
}
Cela pourrait également être résolu en utilisant .replace () method en remplaçant tout ce qui n'est pas une voyelle par une chaîne vide (en gros, il supprimera ces caractères) et en renvoyant la nouvelle longueur de chaîne:
function vowelCount(str) {
return str.replace(/[^aeiou]/gi, "").length;
};
ou si vous préférez ES6
const vowelCount = (str) => ( str.replace(/[^aeiou]/gi,"").length )
Utilisez simplement cette fonction [pour ES5]:
function countVowels(str){
return (str.match(/[aeiou]/gi) == null) ? 0 : str.match(/[aeiou]/gi).length;
}
Travaillera comme un charme