Reputation: 1821
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
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
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