I am a beginner in Javascript.
I tried to make a function about covert string into uppercase or lowercase.
But I am confused why it can get expected output.
Following is my function purpose and codes.Thank you!
- Function purpose :
When letter in string is uppercase, it will change into lowercase. When letter in string is lowercase, it will change into uppercase. For example: "Peter" will transfer into "pETER"
- Question:
I can't understand why my code ends up with "Peter" rather then "pETER"
function swap(str) {
var name = ''
for (i = 0; i <= str.length - 1; i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i].toUpperCase()
} else {
str[i].toLowerCase()
}
name += str[i]
}
return name
}
console.log(swap('Peter'))
I am not sure whether the problem is in this line.
if(str[i] >= 'a' && str[i] <= 'z'){
str[i].toUpperCase()
}
Can anyone help me , thanks!!
5 Answers 5
I think your problem is to think that str[i].toUpperCase() or str[i].toLowerCase() will change the value of the str[i], but it doesn't. These functions will change the char value to uppercase or lowercase and they'll return the result of the function call, but the original variable (str[i]) will remain its value.
Try with this version:
function swap(str) {
var name = ''
var string;
for (i = 0; i <= str.length - 1; i++) {
string = str[i];
if (str[i] == string.toUpperCase()) {
name += string.toLowerCase();
} else {
name += string.toUpperCase();
}
}
return name;
}
console.log(swap('PeTeR'));
1 Comment
Use reduce to accumulate your new string and lowercase/upercase JS functions to check your letters hence do the conversion.
const swap = (str) => str.split('').reduce((acc, char) =>
acc += char === char.toLowerCase() ? char.toUpperCase() :
char.toLowerCase(), '')
console.log(swap('Peter'))
Comments
This works:
function swap(str) {
var name = ''
for (i = 0; i <= str.length - 1; i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
name += str[i].toUpperCase()
} else {
name += str[i].toLowerCase()
}
}
return name
}
console.log(swap('Peter'))
Comments
I have changed your code but it should work now
function swap(str) {
var name = ''
var lowers = "abcdefghijklmnopqrstuvwxyz";
for (i = 0; i <= str.length - 1; i++) {
if (lowers.includes(str[i])) {
name +=str[i].toUpperCase()
} else {
name +=str[i].toLowerCase()
}
}
return console.log(name);
}
swap("Peter");
1 Comment
function name(str){
let newArr = str.split('')
let output = [];
for(let x of newArr){
output.push(x.toUpperCase());
}
return output.join('');
}
name('hello')
Comments
Explore related questions
See similar questions with these tags.
str[i].toUpperCase()won't make the i-th letter in your string uppercase, instead, it will return the uppercase version, which you can use to build a new string.