eScripts
eScripts

Reputation: 11

How to capitalise the first letter of each word after reversing a string

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(''); 
} 

Upvotes: 1

Views: 1122

Answers (6)

Arman Charan
Arman Charan

Reputation: 5797

// 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}`)

Upvotes: 0

Casper
Casper

Reputation: 1539

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>

Upvotes: 0

Jeremy Myers
Jeremy Myers

Reputation: 159

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

Upvotes: 0

Hemant Rajpoot
Hemant Rajpoot

Reputation: 690

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(' '); 
    } 

Upvotes: 0

Hassan Imam
Hassan Imam

Reputation: 22574

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'));

Upvotes: 0

brk
brk

Reputation: 50346

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>

Upvotes: 1

Related Questions