2016-10-28 21 views
0

私はその関数内の別の関数を呼び出して文字列の母音を数えるJavascript関数を書こうとしていますが、コンソールでテストすると0が返されます。2つの関数を使ってJavascript文字列の母音を数えるには?

ここで私の最初の関数はうまくいきます文字列が母音かどうかを認識します。

function isVowel(ch){ 
    var pattern = /[aeiouAEIOU]/ 
    return pattern.test(ch); 
}; 

第2の機能については、私のアイデアのどれも機能していません。ここで私はこれまで試してみました何のいくつかの例は以下のとおりです。

この1つは私に0を返します。

function countVowels(str){ 
var count = 0; 

for(var i; i <= str.length; ++i){ 
    if(isVowel(i)){ 
     ++count; 
    } 
} 
return count; 
}; 

私も上記を試してみましたが、ために()領域にstrの後.LENGTHを取り除きます。

もう一つの例が、この1つは私にエラーを与える:

function countVowels(str){ 
var count = 0 
var pattern = /[aeiouAEIOU]/ 

for(var i = 1; i <= str.length(pattern); ++i){ 
    if(isVowel(i)){ 
     ++count; 
    } 
} 
return count; 
}; 

私も他のさまざまな機能を試してみたが、比較的短いこのポストを維持するために、私はそれらを掲示していきません。 。私はJavascriptにはかなり新しく、私は何が間違っているのか分かりません。どんな助けでも大歓迎です!

+1

「時にはy」と幸運。 –

+0

'str.match(/ [aeiou]/gi).length'を使うだけです。 – Xufox

+3

_ "これは私に0を返します" - もちろん、ループカウンタ 'i'を' isVowel'に渡すだけなので、 '0'が母音かどうかを確認しています。母音ではないので、結果は0です。 – CBroe

答えて

1

文字列g属性を使用して、.match()を試してみてください。

g
iグローバル:大文字小文字を区別しない

Regexp documentation

function countVowels(ch){ 
 
    return ch.match(/[aeiouy]/gi).length; 
 
} 
 

 
var str = "My string"; 
 
alert(countVowels(str)); // 2

0

iは、インデックス、ではない文字です。それは次のようになります。

if (isVowel(str[i])) { 
    count++; 
} 

また、str.length(pattern)は間違っています。 lengthはプロパティであり、関数ではないため、str.lengthである必要があります。

1

Robisebの回答は進んでいますが、コードが機能していない理由をお知らせしたいと思います(私はあなたの最初の試みを参照しています)。 CBroeが述べたように、あなたはisVowel機能にiを渡している

  1. :基本的には、ループに2つのミスを犯しました。 iは、文字列内の実際の文字ではなく、ループのインデックスを表す整数です。文字を取得するには、str.substr(i, 1)を実行することができます。つまり、「文字列の中にiの位置から1文字を与えてください」という意味です。

  2. i変数には初期値を指定していません。変数を作成するときは定義されていないので、変数を増やすことはできません。

alert(countVowels("hello")); 
 

 
function countVowels(str) { 
 
    var count = 0; 
 

 
    for (var i = 0; i <= str.length; ++i) { 
 
    if (isVowel(str.substr(i, 1))) { 
 
     count++; 
 
    } 
 
    } 
 
    return count; 
 
}; 
 

 
function isVowel(ch) { 
 
    var pattern = /[aeiouAEIOU]/ 
 
    return pattern.test(ch); 
 
};


UPDATE:あなたは他の回答がインデックスから文字列内の文字を選択するために、他の方法を使用していることがわかります。実際には、さまざまなオプションがあります。ただ、参考のために:

str.slice(i,i+1); 
str.substring(i,i+1); 
str.substr(i,1)); 
str.charAt(i); 
str[i]; 
0

あなたはにisVowelのための私変数

とパラメータを値0を代入するのを忘れて、文字、文字列ではありません

のインデックスここでの情報ですJS言語:https://stackoverflow.com/tags/javascript/info

function isVowel(ch){ 
 
    var pattern = /[aeiouAEIOU]/ 
 
    return pattern.test(ch); 
 
} 
 

 
function countVowels(str){ 
 
var count = 0; 
 

 
    // you forgot to assign the value to i variable 
 
for(var i = 0; i < str.length; i++){ 
 

 
    // isVowel(str[i]), not isVowel(i) 
 
    if(isVowel(str[i])){ 
 
     count++; 
 
    } 
 
} 
 
return count; 
 
} 
 

 
console.log(countVowels('forgot'))

0

はもちろん、あなたがこのようにそれを実行する必要があります。

あまり効率的で、他の回答未満有用ではあるが、少なくとも時間の異なる数の50%を返すの面白い性質を持っている、
function isVowel(c){ 
    var lc = c.toLowerCase(); 
    if(lc === 'y'){ 
     return (Math.floor(Math.random() * 2) == 0); 
    } 
    return ['a','e','i','o','u'].indexOf(lc) > -1; 
} 
function countVowels(s){ 
    var i = 0; 
    s.split('').each(function(c){ 
     if(isVowel(c)){ 
      i++; 
     } 
    }); 
    return i; 
} 
console.log(countVowels("the quick brown fox jumps over the lazy dog")); 

、いつもY.

関連する問題