Ludwig
Ludwig

Reputation: 1821

How to reverse string and set last letter as lowercase

I have this piece of code where I was expecting to get as an output reverse string, and only in case that the last letter is uppercase, that letter gets converted to lowercase, but it outputs the part of the string until it hits the first uppercase letter, and not to whole reversed string with last letter converted to lowercase in case it is not lowercase already.

Any help is greatly appreciated! Thank you in advance!

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;
}

Upvotes: 1

Views: 1205

Answers (2)

I wrestled a bear once.
I wrestled a bear once.

Reputation: 23409

a little simpler

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/


after clarification, i think you want this..

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/

Upvotes: 3

Stephen Woods
Stephen Woods

Reputation: 4049

Your return statement in your if statement is cutting your loop off prematurely if you have an uppercase letter in the beginning/middle of your string. I'd just move it outside of the for loop.

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;
}

Upvotes: 1

Related Questions