2016-02-04 90 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

修复了它,谢谢澄清 –

相关问题