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