2016-02-04 51 views
1

我有這段代碼,我期望得到一個輸出反向字符串,並且只有在最後一個字母是大寫的情況下,該字母纔會轉換爲小寫,但是它輸出字符串的一部分,直到它遇到第一個大寫字母,而不是整個反轉字符串,並且最後一個字母轉換爲小寫字母,以防它已經不是小寫字母。如何反轉字符串並將最後一個字母設置爲小寫

任何幫助,非常感謝!先謝謝你!

function stringrev(str) { 
    var newString = ""; 
    for (var i = str.length - 1; i >= 0; i--) { 

     // Add each character to newString 
     newString = newString + str.charAt(i); 
     if (newString.charAt(newString.length - 1) === newString.charAt(newString.length - 1).toUpperCase()) { 
      return newString.slice(0, newString.length - 1) + newString.charAt(newString.length - 1).toLowerCase(); 
     } 
    } 

    return newString; 
} 
+0

正如你所說,「它輸出字符串的部分,直到它遇到第一個大寫字母」。看看你的邏輯,爲字符串中的每個字符創建一個新的字符串,檢查一個大寫字符,如果你找到一個返回。所以是的,它會停在第一個大寫字母。 – obi1

回答

1

如果您的if語句中的return語句會在您的字符串的開頭/中間有一個大寫字母過早切斷循環。我只是把它移到for循環之外。

function stringrev(str) { 
    var newString = ""; 

    for (var i = str.length - 1; i >= 0; i--) { 
    // add each character to newString 
    newString = newString + str.charAt(i); 
    } 
    if (newString.charAt(newString.length - 1) === newString.charAt(newString.length - 1).toUpperCase()) { 
    return newString.slice(0, newString.length - 1) + newString.charAt(newString.length - 1).toLowerCase(); 
    } 

    return newString; 
} 
3

稍微簡單

function stringrev(str) { 
    var newString = ""; 
    for (var i = str.length; i--;) 
     newString += i == str.length-1 ? str.charAt(i).toUpperCase() : str.charAt(i); 
    return newString; 
} 

alert(stringrev("asdfasdf")); 

https://jsfiddle.net/6xce1m7w/1/


澄清後,我想你想的..

function stringrev(str) { 
    // make thee last letter lower case 
    str = str.substr(0, str.length-1) + str.charAt(str.length-1).toLowerCase(); 
    // reverse the order 
    var newString = ""; 
    for (var i = str.length; i--;) newString += str.charAt(i); 
    return newString; 
} 

alert(stringrev("asdfasdF")); 

https://jsfiddle.net/v6qw2dyd/

+0

OP聲明「只有在最後一個字母是大寫字母的情況下,該字母纔會被轉換成小寫字母」。雖然這更清潔,但這不完全是OP要求的。編輯:你修好了。 Upvoted。 –

+0

修復了它,謝謝澄清 –

相關問題