Skip to content

Instantly share code, notes, and snippets.

@draber06
Last active March 24, 2019 21:36
Show Gist options
  • Save draber06/ba7272fd8e58268c275f56587e5395ca to your computer and use it in GitHub Desktop.
Save draber06/ba7272fd8e58268c275f56587e5395ca to your computer and use it in GitHub Desktop.
change case
function changeLetterCase(str, letterCase, firstLetterReversed) {
if (typeof str !== "string") {
throw Error(`First parameter - ${typeof str} but must be string`);
}
if (letterCase != "upper" && letterCase != "lower") {
throw Error(
`Invalid parameter - letterCase: "${letterCase}". Two valid options: lower and upper`
);
}
const isLowerCase = code => 97 <= code && code <= 122;
const isUpperCase = code => 65 <= code && code <= 90;
const caseChangers = {
upper: code => (isLowerCase(code) ? code - 32 : code),
lower: code => (isUpperCase(code) ? code + 32 : code)
};
const caseChanger = caseChangers[letterCase];
const caseChangerReverse =
letterCase == "upper" ? caseChangers.lower : caseChangers.upper;
let newStr = "";
for (let i = 0; i < str.length; i++) {
let code = str[i].charCodeAt(0);
if (firstLetterReversed && i == 0) {
code = caseChangerReverse(code);
} else {
code = caseChanger(code);
}
newStr += String.fromCharCode(code);
}
return newStr;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment