diff --git a/StringsAndTings.js b/StringsAndTings.js index 4fdca47..03ffda5 100644 --- a/StringsAndTings.js +++ b/StringsAndTings.js @@ -1,29 +1,71 @@ class StringsAndTings { - - // @return string with identical content, and the first character capitalized - camelCase(str){ - return null; + // @return string with identical content, and the first character capitalized + camelCase(str) { + let strSplit = str.split(" "); + for (let i = 0; i < strSplit.length; i++) { + let word = strSplit[i]; + strSplit[i] = word[0].toUpperCase() + word.substring(1); } + return strSplit.join(" "); + } - //@return string with identical contents, with each word individually in reverse order - reverseString(str){ - return null; - } + // @return string with identical contents, with each word individually in reverse order + reverseString(str) { + let result = str.split("").reverse().join(""); + return result; + } - // @return string with identical contents, in reverse order, with first character capitalized - reverseThenCamelCase(str){ - return null; + // @return string with identical contents, with each word individually in reverse order + reverseInPlaceString(str) { + let words = str.split(" "); + let result = ""; + for (let i = 0; i < words.length; i++) { + let reversedWord = words[i].split("").reverse().join(""); + words[i] = reversedWord; } + result = words.join(" "); + return result; + } - // @return string with identical contents excluding first and last character - removeFirstAndLastCharacter(str){ - return null; + // @return string with identical contents, in reverse order, with first character capitalized + reverseThenCamelCase(str) { + let reversed = str.toLowerCase().split("").reverse(); + reversed = reversed.join("").split(" "); + let newArr = []; + for (let i = 0; i < reversed.length; i++) { + let firstLetter = reversed[i].charAt(0).toUpperCase(); + let restOfWord = reversed[i].slice(1); + newArr[i] = firstLetter + restOfWord; } + return newArr.join(" "); + } - // @return string with identical characters, each with opposite casing - invertCasing(str){ - return null; - } -} + // @return string with identical contents excluding first and last character + removeFirstAndLastCharacter(str) { + let result = str.substr(1, str.length - 2); + return result; + } -module.exports = StringsAndTings; \ No newline at end of file + // @return string with identical characters, each with opposite casing + invertCasing(str) { + let countChanges = 0; + let isLetter = (c) => c.toLowerCase() !== c.toUpperCase(); + let isLowerCase = (c) => c.toLowerCase() === c; + + let flippedMessage = Array.from(str) + .map((c) => { + if (!isLetter(c)) { + return c; + } + countChanges++; + // return uppercase character if c is a lowercase char + if (isLowerCase(c)) { + return c.toUpperCase(); + } + // Here, we know c is an uppercase character, so return the lowercase + return c.toLowerCase(); + }) + .join(""); + return flippedMessage } +} +module.exports = StringsAndTings; diff --git a/StringsAndTings.test.js b/StringsAndTings.test.js index 689b63d..885f699 100644 --- a/StringsAndTings.test.js +++ b/StringsAndTings.test.js @@ -8,7 +8,7 @@ test("camelCaseTest", () => { let input = "she sells sea shells"; let expected = "She Sells Sea Shells"; - let actual = stringsAndTings.camelCase(15); + let actual = stringsAndTings.camelCase("she sells sea shells"); expect(actual).toEqual(expected); }); @@ -19,18 +19,18 @@ test("reverseTest", () => { let input = "she sells sea shells"; let expected = "sllehs aes slles ehs"; - let actual = stringsAndTings.camelCase(15); + let actual = stringsAndTings.reverseString(input); expect(actual).toEqual(expected); }); -test("reverseWordsTest", () => { +test("reverseInPlaceStringTest", () => { let stringsAndTings = new StringsAndTings(); let input = "she sells sea shells"; let expected = "ehs slles aes sllehs"; - let actual = stringsAndTings.camelCase(15); + let actual = stringsAndTings.reverseInPlaceString(input); expect(actual).toEqual(expected); }); @@ -40,9 +40,7 @@ test("reverseThenCamelCaseTest", () => { let stringsAndTings = new StringsAndTings(); let input = "she sells sea shells"; let expected = "Sllehs Aes Slles Ehs"; - - let actual = stringsAndTings.camelCase(15); - + let actual = stringsAndTings.reverseThenCamelCase(input); expect(actual).toEqual(expected); }); @@ -52,7 +50,7 @@ test("removeFirstAndLastCharacterTest", () => { let input = "she sells sea shells"; let expected = "he sells sea shell"; - let actual = stringsAndTings.camelCase(15); + let actual = stringsAndTings.removeFirstAndLastCharacter(input); expect(actual).toEqual(expected); }); @@ -64,8 +62,7 @@ test("invertCasingTest1", () => { let input = "shE sells SEA sHeLlS"; let expected = "SHe SELLS sea ShElLs"; - let actual = stringsAndTings.camelCase(15); + let actual = stringsAndTings.invertCasing(input); expect(actual).toEqual(expected); }); -