我使用基本的JavaScript来计算字符串中元音的数量。下面的代码工作,但我想清理一下。考虑到它是一个字符串,会使用.includes()
帮助吗?如果可能的话,我想使用类似string.includes("a", "e", "i", "o", "u")
的东西来清理条件语句。此外,是否需要将输入转换为字符串?
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;
}
答案 0 :(得分:23)
你可以用一个小的正则表达式实现这个:
function getVowels(str) {
var m = str.match(/[aeiou]/gi);
return m === null ? 0 : m.length;
}
这只与正则表达式匹配(g
使其搜索整个字符串,i
使其不区分大小写)并返回匹配数。我们检查null
,如果没有匹配(即没有元音),那么返回0。
答案 1 :(得分:6)
使用Array.from()
方法将字符串转换为数组,然后使用Array.prototype.filter()
方法过滤数组以仅包含元音,然后length
属性将包含数字元音。
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
&#13;
答案 2 :(得分:3)
function countVowels(subject) {
return subject.match(/[aeiou]/gi).length;
}
你不需要转换任何内容,如果需要,Javascript的错误处理足以暗示你这么简单的功能。
答案 3 :(得分:1)
Short和ES6,可以使用功能count(str);
const count = str => (str.match(/[aeiou]/gi) || []).length;
答案 4 :(得分:1)
随着ES5中forEach的引入,这可以通过一种功能更紧凑的方式来实现,并且还具有每个元音的计数并将该计数存储在对象中。
function vowelCount(str){
let splitString=str.split('');
let obj={};
let vowels="aeiou";
splitString.forEach((letter)=>{
if(vowels.indexOf(letter.toLowerCase())!==-1){
if(letter in obj){
obj[letter]++;
}else{
obj[letter]=1;
}
}
});
return obj;
}
答案 5 :(得分:1)
您可以使用spread operator将给定的字符串转换为数组,然后可以将filter()
的字符仅转换为元音(不区分大小写)。
然后,您可以检查数组的length
以获得字符串中的元音总数:
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
答案 6 :(得分:1)
使用match
但要小心,因为如果找不到匹配项,它可以返回 null
const countVowels = (subject => (subject.match(/[aeiou]/gi) || []).length);
答案 7 :(得分:0)
这也可以使用.replace()方法解决,通过替换任何不带空字符串的元音(基本上它将删除这些字符)并返回新的字符串长度:
function vowelCount(str) {
return str.replace(/[^aeiou]/gi, "").length;
};
或者如果您更喜欢ES6
const vowelCount = (str) => ( str.replace(/[^aeiou]/gi,"").length )
答案 8 :(得分:0)
这是最短的解决方案
function getCount(str) {
return (str.match(/[aeiou]/ig)||[]).length;
}
答案 9 :(得分:0)
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 ;
}
答案 10 :(得分:0)
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)" />
答案 11 :(得分:0)
只需使用此功能[对于ES5]:
kernel-module.ko
会像魅力一样工作
答案 12 :(得分:0)
const containVowels = str => {
const helper = ['a', 'e', 'i', 'o', 'u'];
const hash = {};
for (let c of str) {
if (helper.indexOf(c) !== -1) {
if (hash[c]) {
hash[c]++;
} else {
hash[c] = 1;
}
}
}
let count = 0;
for (let k in hash) {
count += hash[k];
}
return count;
};
console.log(containVowels('aaaa'));
答案 13 :(得分:0)
(A)
const countVowels = data => [...data.toLowerCase()].filter(char => 'aeiou'.includes(char)).length;
(B)
const countVowels = data => data.toLowerCase().split('').filter(char => 'aeiou'.includes(char)).length;
countVowels("Stackoverflow") // 4
答案 14 :(得分:0)
使用此函数可获取字符串中元音的数量。效果很好。
function getVowelsCount(str)
{
//splits the vowels string into an array => ['a','e','i','o','u','A'...]
let arr_vowel_list = 'aeiouAEIOU'.split('');
let count = 0;
/*for each of the elements of the splitted string(i.e. str), the vowels list would check
for any occurence and increments the count, if present*/
str.split('').forEach(function(e){
if(arr_vowel_list.indexOf(e) !== -1){
count++;} });
//and now log this count
console.log(count);}
//Function Call
getVowelsCount("World Of Programming");
给定字符串的输出为5。试试看。
//代码-
function getVowelsCount(str)
{
let arr_vowel_list = 'aeiouAEIOU'.split('');
let count = 0;
str.split('').forEach(function(e){
if(arr_vowel_list.indexOf(e) !== -1){
count++;} });
console.log(count);
}
答案 15 :(得分:0)
以下内容有效且简短:
function countVowels(str) {
return ( str = str.match(/[aeiou]/gi)) ? str.length : 0;
}
console.log(countVowels("abracadabra")); // 5
console.log(countVowels("")); // 0
答案 16 :(得分:0)
您可以使用简单的include函数,如果给定数组包含给定字符,则返回true,否则返回false。
注意:include()方法区分大小写。因此,在比较字符之前,请将其转换为小写,以免丢失所有可能的大小写。
for (var i = 0; i <= string.length - 1; i++) {
if ('aeiou'.includes(string[i].toLowerCase())) {
vowelsCount += 1;
}
}
答案 17 :(得分:0)
另一种方法(使用reduce
)
function getVowels(str) {
return Array.from(str).reduce((count, letter) => count + 'aeiou'.includes(letter), 0);
}
答案 18 :(得分:0)
我的解决方案:
const str = "In West Philadephia, born and raised.";
const words = str.split("");
function getVowelCount() {
return words.filter(word => word.match(/[aeiou]/gi)).length;
}
console.log(getVowelCount());
输出:12
答案 19 :(得分:-1)
function vowels_count()
{
var count = 0;
var a_count = 0;
var e_count = 0;
var i_count = 0;
var o_count = 0;
var u_count = 0;
var str_arr = "afhfvhugiusholhriefhkebruguheuhkujhkuthbuhef";
for ( i=0; i <= str_arr.length -1 ; i++)
{
if ( str_arr[i] == 'a' )
{
a_count++;
}
if ( str_arr[i] == 'e' )
{
e_count++;
}
if ( str_arr[i] == 'i' )
{
i_count++;
}
if ( str_arr[i] == 'o' )
{
o_count++;
}
if ( str_arr[i] == 'u' )
{
u_count++;
}
}
console.log("a's count is" + " " + a_count );
console.log("e's count is" + " " + e_count );
console.log("i's count is" + " " + i_count );
console.log("o's count is" + " " + o_count );
console.log("u's count is" + " "+ u_count );
}