2015-12-03 91 views
0

通過'Eloquent Javascript'工作,我在理解如何在語言中正確使用iffor語句時遇到了一些障礙。我應該寫一個函數來計算給定字符串中大寫'B'的所有實例。我迄今編寫的代碼:獲取'未定義',找不到原因

function countBs(s) { 
 
    var counter = 0; 
 
    for (i = 0; i < s.length; i++) { 
 
    if ('B' == s.charAt(i)) {} 
 
    counter += 1; 
 
    } 
 
} 
 

 
console.log(countBs("BBC"));

預期輸出2

實際輸出undefined

是我的循環去錯了,還是我的'如果'?

+5

你沒有返回'counter'。 –

+1

這是這樣的:if(s.charAt(i)=='B') –

+1

返回計數器,你沒有返回任何東西從函數 – Rozuur

回答

3

你有兩個錯誤

  1. 你增加你的counter外的if語句的。
  2. 您沒有return聲明。

以下可用於:

function countBs(s){ 
    var counter = 0; 

    for(i = 0; i < s.length; i++){ 
    if ('B' == s.charAt(i)) { 
     counter += 1; // this needs to be inside the if statement 
    } 
    } 

    return counter; 
} 
+0

真棒!謝謝。 – n1c9

2

您的功能沒有return聲明。

+0

哦哇。不能相信我錯過了這一點。感謝您及時的回覆! – n1c9

1

的幾個問題。

function countBs(s) { 
 
    var counter = 0; 
 
    for (i = 0; i < s.length; i++) { 
 
    if ('B' == s.charAt(i)) { 
 
     ++counter; 
 
    } 
 
    } 
 
    return counter; 
 
} 
 

 
document.write(countBs("BBC"));

  1. 你不是在函數結束返回counter
  2. if聲明被打開,然後迅速關閉,因此沒有任何反應,如果角色是B
  3. 即使您返回了counter並修正了上述2個錯誤,該函數仍然會在1找到B。要解決此問題,請在for結束後移動return

如果你有興趣,同樣的問題可以用這一個班輪解決:

function countBs(s) { 
 
    return s.match(/B/g).length; 
 
} 
 

 
document.write(countBs("BBC"));

其中找到所有B字符(區分大小寫),使他們到數組中,然後返回該數組中有多少項。

+0

原本沒有退貨聲明,爲什麼它會提前退出? – TbWill4321

+0

@ TbWill4321如果他按照之前的一些回覆和評論添加了「return」,它仍然會在'for'中執行。看起來原來的問題已被編輯爲清晰,所以我的第三點失去了一點意義。 – Scott

+0

非常感謝! – n1c9

相關問題