1

I want to make everything lowercase for when the string is reversed but then capitalise the first letter of each word after. I have reversed the string but after many attempts, the only outcome I can get is to then capitalise the entire reversed string.

function titleCase(str) {
var reversed = str.toLowerCase().split('').reverse();
var newArr = [];
for (var i = 0; i < reversed.length; i++) {
    var firstLetter = reversed[i].charAt(0).toUpperCase();
    var restOfWord = reversed[i].slice(1);
        newArr[i] = firstLetter + restOfWord;     
 }
 return newArr.join(''); 
} 
eScripts
  • 11
  • 2

6 Answers6

1

Use toLowerCase() if you need to convert it back to lowercase & css property text-transform: capitalize will capitalize first letter of every word

function titleCase(str) {
  var reversed = str.toLowerCase().split('').reverse();
  var newArr = [];
  for (var i = 0; i < reversed.length; i++) {
    var firstLetter = reversed[i].charAt(0).toUpperCase();
    var restOfWord = reversed[i].slice(1);
    newArr[i] = (firstLetter + restOfWord).toLowerCase();
  }
  return newArr.join('');
}


document.getElementById('test').innerHTML = titleCase('Hello how are you')
.test {
  text-transform: capitalize
}
<div class="test" id="test"></div>
brk
  • 48,835
  • 10
  • 56
  • 78
0

here now it will work

 function titleCase(str) {
    var reversed = str.toLowerCase().split(' ').reverse();
    var newArr = [];
    for (var i = 0; i < reversed.length; i++) {
            reversed[i]=reversed[i].split("").reverse().join("");


    var firstLetter = reversed[i].charAt(0).toUpperCase();
        var restOfWord = reversed[i].slice(1);
            newArr[i] = firstLetter + restOfWord;     
     }
     return newArr.join(' '); 
    } 
Hemant Rajpoot
  • 683
  • 1
  • 11
  • 29
  • This is giving me the capital letter at the start of each word but the word is now no longer reversed like I need it to be. I can't figure out how to have both at the same time. – eScripts Nov 17 '17 at 03:52
  • do you want each word to be reversed? – Hemant Rajpoot Nov 17 '17 at 03:54
  • Yeah so for instance 'hello HELLO' would become 'Olleh Olleh'. Sorry I should have put something like this in the description. – eScripts Nov 17 '17 at 03:56
0

Try this -

function reverseString(str) {
  return str.split("").reverse().join("").toLowerCase();
}
document.getElementById('test').append(reverseString("Hello"));
#test {
  text-transform: capitalize
}
<span id='test'></span>
Jithin Raj P R
  • 6,667
  • 8
  • 38
  • 69
Casper
  • 1,469
  • 10
  • 19
0

After reversing the string, you need to join it back and split on spaces, so that inside your for loop you are only capitalising the first letter of each word.

function titleCase(str) {
var reversed = str.toLowerCase().split('').reverse();
reversed = reversed.join('').split(' ');
var newArr = [];
for (var i = 0; i < reversed.length; i++) {
    var firstLetter = reversed[i].charAt(0).toUpperCase();
    var restOfWord = reversed[i].slice(1);
        newArr[i] = firstLetter + restOfWord;     
 }
 return newArr.join(' '); 
} 

console.log(titleCase('hello HELLO'));
Hassan Imam
  • 21,956
  • 5
  • 41
  • 51
0

// Input.
const before = 'hello WORLD'
console.log(`Before: ${before}`)

// Conversion.
const lowercase = before.toLowerCase()
const reversed = [...lowercase].reverse()
const capitalised = reversed.map((character, index) => {
  const isFirstCharacter = (index === 0)
  const isAfterWhiteSpace = isFirstCharacter ? false : (reversed[index-1] === ' ')
  if (isFirstCharacter || isAfterWhiteSpace) return character.toUpperCase()
  return character
})

// Output + Proof.
const after = capitalised.join('')
console.log(`After: ${after}`)
Arman Charan
  • 5,669
  • 2
  • 22
  • 32
0

You can just use replace and some fancy regex to do what you want.

var sentence = "hello i am a world 12321321 ;[/>?]" 
console.log(sentence);
function titleCase(str) {
 return str.toLowerCase().split('').reverse().join('').replace(/\b\w/mg,
   (match)=>{return match.toUpperCase();}
 );
} 
console.log(titleCase(sentence));
Jeremy Myers
  • 159
  • 6