--- title: Mutations --- # Mutations --- ## Problem Explanation * Return true if the string in the first element of the array contains all of the letters of the string in the second element of the array.. #### Relevant Links * String.indexOf() --- ## Hints ### Hint 1 * If everything is lowercase it will be easier to compare. ### Hint 2 * Our strings might be easier to work with if they were arrays of characters. ### Hint 3 * A loop might help. Use `indexOf()` to check if the letter of the second word is on the first. --- ## Solutions
Solution 1 (Click to Show/Hide) **Procedural** ```js function mutation(arr) { var test = arr[1].toLowerCase(); var target = arr[0].toLowerCase(); for (var i = 0; i < test.length; i++) { if (target.indexOf(test[i]) < 0) return false; } return true; } ``` #### Code Explanation First we make the two strings in the array lowercase. `test` will hold what we are looking for in `target`. Then we loop through our test characters and if any of them is not found we `return false`. If they are _all_ found, the loop will finish without returning anything and we get to `return true`. #### Relevant Links * String.toLowerCase() * For loops
Solution 2 (Click to Show/Hide) **Declarative** ```js function mutation(arr) { return arr[1] .toLowerCase() .split("") .every(function(letter) { return arr[0].toLowerCase().indexOf(letter) != -1; }); } ``` #### Code Explanation Grab the second string, lowercase and turn it into an array; then make sure _every_ one of its _letters_ is a part of the lowercased first string. `Every` will basically give you letter by letter to compare, which we do by using `indexOf` on the first string. `indexOf` will give you -1 if the current `letter` is missing. We check that not to be the case, for if this happens even once `every` will be false. #### Relevant Links * Array.split() * Array.every()