2017-01-02 200 views
0

剛剛學習JS和我試圖回答以下問題:編寫一個函數,需要2個輸入(字符串和字符),使用for循環,將返回true,如果字符在字符串中找到。返回true是字符串包含特定字符在Javascript中

這裏是我想出了:

var hasEl = function(str, char) { 
    for(var i = 0; i < str.length; i++) { 
    if (str[i] == char) { 
     return true; 
    } else { 
     return false; 
    } 
    } 
}; 
console.log(hasEl("I am Batman", "n")); 

這將返回「假」當我運行它,但是,如果我改變了「N」到「I」則返回「真」。所以也許它只是檢查字符串的第一個字符?

謝謝你的幫助。

問候

+0

除了循環,你還可以像'str.includes(char)'那樣做。 – Redu

回答

1

如果第一個字符是不是要求之一,if會失敗,並且else塊將立即返回false

return false;移到循環外部。如果在字符串中找到字符,它將打破循環,並返回true。如果循環結束而沒有返回,它將返回false

var hasEl = function(str, char) { 
 
    for(var i = 0; i < str.length; i++) { 
 
    if (str[i] == char) { 
 
     return true; 
 
    } 
 
    } 
 
    
 
    return false; 
 
}; 
 
console.log(hasEl("I am Batman", "n"));

1

只需使用的indexOf

"asd".indexOf('a') >= 0 
+0

雖然這是一個有效的替代方案,但它無法解釋原始發佈代碼無法工作的原因。 –

+0

我想@Ori Drori已經解釋了爲什麼,如果第一個字符不是必需字符,則OP從函數返回 – deathangel908

0

你學習編程或JS?

如果你正在學習JS,你可以做

const hasEl = (str, c) => str.includes(c); 

你的代碼是不工作,因爲如果條件爲真究其原因,該功能將只返回false。

你需要做的

var hasEl = function(str, char) { 
    for(var i = 0; i < str.length; i++) { 
     if (str[i] == char) { 
      return true; 
     } 
    } 
    return false; 
}; 
0

試試這個代碼

var hasEl = function(str, char) { 
 
    for(var i = 0; i < str.length; i++) { 
 
    if (str[i] == char) { 
 
     return true; 
 
    } 
 
    } 
 
    
 
    return false; 
 
}; 
 
console.log(hasEl("I am Batman", "n"));

,或者你可以用這個也

var hasEl = function(str, char) { 
 
    if (str.indexOf(char)!=-1) { 
 
     return true; 
 
    } 
 
    return false; 
 
}; 
 
console.log(hasEl("I am Batman", "n"));

+0

請花時間解釋 - 在您的答案中 - 此答案的工作原理和原因;向OP投擲代碼並說'試試這個'幾乎沒有任何教訓。 –

0

您的代碼存在的問題是,它在循環的每一輪中都會運行elseretun false語句。但只要有一個return語句被執行,整個函數就會停止...所以,你可以改變你的功能如下:

var hasEl = function(str, char) { 
 
    for(var i = 0; i < str.length; i++) { 
 
    if (str[i] == char) { 
 
     return true; 
 
    } 
 
    } 
 
    return false; 
 
};

然而,有一個更容易才達到相同的解決方案的方式:

var hasEl = function(str, char) { 
 
    if(str.indexOf(char)==-1){ 
 
    return false; 
 
    }else{ 
 
    return true; 
 
    } 
 
};

它使用indexOf函數中的內置函數工作,通常返回ind在函數用作方法的字符串中的特定字符串(在本例中只有一個字符)。但是,如果在字符串中未找到字符,則函數返回-1。其餘的應該是不言自明的。

相關問題