2017-04-17 76 views
1

我想要计算字符串中特定字符的数量,但得到“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

将返回循环外 – Engineer

回答

4

特殊照顾在返回的循环,所以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"); 

顺便说一句,较短:

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

返回数应在一个地方出来的回路

1

您不小心将return声明放入您的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");

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>