2017-02-23 25 views
5

母音の数を文字列に数えようとしていますが、私のカウンタは複数の母音を返さないようです。誰かが私のコードに間違っていることを教えてもらえますか?ありがとう!Javascript:文字列内の母音の数をカウントする

var vowelCount = function(str){ 
    var count = 0; 
    for(var i = 0; i < str.length; i++){ 
    if(str[i] == 'a' || str[i] == 'i' || str[i] == 'o' ||str[i] == 'e' ||str[i] == 'u'){ 
     count+=1; 
    } 
    console.log(count); 
    return count; 
    } 
} 
vowelCount('aide') 
+8

'リターンカウント;'ループ –

+3

のために転出string.match(/ [AEIOU]/g)が、私は '/ [AEIOU使用したい – Rajesh

+3

@Rajeshを.length''てみてください]/ig' – Phil

答えて

1

これも行う必要があります。 toLowerCaseメソッド()

var vowelCount = function(str){ 
    var count = 0; 
    for(var i = 0; i < str.length; i++){ 
    if(str[i].toLowerCase() == 'a' || str[i].toLowerCase() == 'i' || str[i].toLowerCase() == 'o' ||str[i].toLowerCase() == 'e' ||str[i].toLowerCase() == 'u'){ 
     count+=1; 
    } 
    } 
return count; 
} 
vowelCount('aide') 
+2

まず、このような基本的な問題には答えないでください。彼らはポータルに多くを追加しません。第二に、あなたが答えを選択した場合、説明を追加してください。あなたはOPのためだけでなく、読者のために答えています – Rajesh

+1

文字ごとに最大5回行うのではなく、文字列全体を小文字にします。 – Phil

6

return count外部forのループを使用するか、置換文字列として"".replace()に最初のパラメータとしてRegExp/[^aeiou]/igを使用し、.replace()

vowelLength = "aide".replace(/[^aeiou]/ig, "").length; 
 

 
console.log(vowelLength); 
 

 
vowelLength = "gggg".replace(/[^aeiou]/ig, "").length; 
 

 
console.log(vowelLength);
によって返される文字列の .legnthを得ます

RegExp説明

文字

[^xyz]否定または補完文字セットを設定します。つまり、大括弧で囲まれていないものと一致します。

国旗

iはケース

gグローバルマッチを無視します。むしろ最初の一致

拡散素子を使用

Array.prototype.reduce()String.prototype.indexOf()またはその代わりに作成する、あるいは

const v = "aeiouAEIOU"; 
 

 
var vowelLength = [..."aide"].reduce((n, c) => v.indexOf(c) > -1 ? ++n : n, 0); 
 

 
console.log(vowelLength); 
 

 
var vowelLength = [..."gggg"].reduce((n, c) => v.indexOf(c) > -1 ? ++n : n, 0); 
 

 
console.log(vowelLength);


をサポートString.prototype.contains()後停止よりマッチをすべて見つけます新しい文字列または新しい配列を取得する文字列の0プロパティまたは反復文字、あなたは.test()が渡された文字のためtrueに評価された場合、最初は0に設定変数をインクリメントするRegExp/[aeiou]/ifor..ofループ、RegExp.prototype.testを使用することができます。

var [re, vowelLength] = [/[aeiou]/i, 0]; 
 

 
for (let c of "aide") re.test(c) && ++vowelLength; 
 

 
console.log(vowelLength); 
 

 
vowelLength = 0; 
 

 
for (let c of "gggg") re.test(c) && ++vowelLength; 
 

 
console.log(vowelLength);

+1

regexはるかに良いアプローチです。 – 31piy

+1

@DarshakGajjarはい、 'i'フラグは大文字と小文字を区別しません。説明のための – guest271314

+0

thnx ... gフラグの用途は何ですか? – Darshak

関連する問題