2017-04-17 23 views
1

文字列内の特定の文字の数を数えようとしていますが、正しい出力ではなく「0」になっています。私は解決策を手に入れる簡単な方法があることを知っていますが、私はこのやり方と私が間違っていることを知りたがっています。文字列内の特定の文字数を数えます。

countCharacter=(str,char)=>str.split("").reduce((count,letter)=>letter===char?count+1:count,0); 
+2

ループの外でリターンを入れて – Engineer

答えて

4

Youreの、これだけ繰り返し処理を一度forloop:短い

function countCharacter(str, char) { 
    var count = 0; 
    for(var i = 0; i < str.length; i++){ 
    if(str.charAt(i) === char){ 
     count++; 
    } 
    } 
return count; 
} 
countCharacter("My cat is driving my crazy", "a"); 

ところで、ループ

3

戻りカウントは外の場所にする必要があります:forループに戻っ

function countCharacter(str, char) { 
    var count = 0; 
    for(var i = 0; i < str.length; i++){ 
    if(str.charAt(i) === char){ 
     count++; 
    } 
    return count; 
    } 
} 
countCharacter("My cat is driving my crazy", "a"); 
1

returnステートメントを間違ってに入れた0ループであるため、ループを最初に実行した後に戻ります。下記の修正:

function countCharacter(str, char) { 
 
    var count = 0; 
 
    for(var i = 0; i < str.length; i++){ 
 
    if(str.charAt(i) === char){ 
 
     count++; 
 
    } 
 
    } 
 
    return count; 
 
} 
 
countCharacter("My cat is driving my crazy", "a");

2

あなたはsplitfilterを試すことができます。その結果Arraylengthが見つかりました文字の数です:

const aFound = "My cat is driving my crazy" 
 
    .split("")      // split per character 
 
    .filter(chr => chr === "a"); // filter on character 'a' 
 

 
const numberOfz = findCharacterInString("I'm driving my cat crazy", "z"); 
 

 
document.querySelector("pre").textContent = ` 
 
    There is/are ${aFound.length} a('s) in "My cat is driving my crazy" 
 
    There is/are ${numberOfz} z('s) in "I'm driving my cat crazy"`; 
 
    
 
// As method (case insensitive) 
 
function findCharacterInString(string2Search, character) { 
 
    return string2Search 
 
    .split("") 
 
    .filter(chr => chr.toLowerCase() === character.toLowerCase()) 
 
    .length; 
 
}
<pre></pre>

関連する問題