2018-10-12 15:37:13 -04:00
---
title: Mutations
---
2019-07-24 00:59:27 -07:00
# Mutations
---
## Problem Explanation
2018-10-12 15:37:13 -04:00
* 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
* < a href = 'http://forum.freecodecamp.com/t/javascript-string-prototype-indexof/15936' target = '_blank' rel = 'nofollow' > String.indexOf()</ a >
2019-07-24 00:59:27 -07:00
---
## Hints
### Hint 1
2018-10-12 15:37:13 -04:00
* If everything is lowercase it will be easier to compare.
2019-07-24 00:59:27 -07:00
### Hint 2
2018-10-12 15:37:13 -04:00
* Our strings might be easier to work with if they were arrays of characters.
2019-07-24 00:59:27 -07:00
### Hint 3
2018-10-12 15:37:13 -04:00
* A loop might help. Use `indexOf()` to check if the letter of the second word is on the first.
2019-07-24 00:59:27 -07:00
---
## Solutions
2018-10-12 15:37:13 -04:00
2019-07-24 00:59:27 -07:00
< details > < summary > Solution 1 (Click to Show/Hide)< / summary >
2018-10-12 15:37:13 -04:00
**Procedural**
2019-07-24 00:59:27 -07:00
```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;
}
```
2018-10-12 15:37:13 -04:00
2019-07-24 00:59:27 -07:00
#### Code Explanation
2018-10-12 15:37:13 -04:00
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
* < a href = 'http://forum.freecodecamp.com/t/javascript-string-prototype-tolowercase/15948' target = '_blank' rel = 'nofollow' > String.toLowerCase()</ a >
* < a href = 'http://forum.freecodecamp.com/t/javascript-for-loop/14666s-Explained' target = '_blank' rel = 'nofollow' > For loops</ a >
2019-07-24 00:59:27 -07:00
< / details >
2018-10-12 15:37:13 -04:00
2019-07-24 00:59:27 -07:00
< details > < summary > Solution 2 (Click to Show/Hide)< / summary >
2018-10-12 15:37:13 -04:00
2019-07-24 00:59:27 -07:00
**Declarative**
2018-10-12 15:37:13 -04:00
2019-07-24 00:59:27 -07:00
```js
function mutation(arr) {
return arr[1]
.toLowerCase()
.split("")
.every(function(letter) {
return arr[0].toLowerCase().indexOf(letter) != -1;
});
}
```
2018-10-12 15:37:13 -04:00
2019-07-24 00:59:27 -07:00
#### Code Explanation
2018-10-12 15:37:13 -04:00
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
* < a href = 'http://forum.freecodecamp.com/t/javascript-string-prototype-split/15944' target = '_blank' rel = 'nofollow' > Array.split()</ a >
* < a href = 'http://forum.freecodecamp.com/t/javascript-array-prototype-every/14287' target = '_blank' rel = 'nofollow' > Array.every()</ a >
2019-07-24 00:59:27 -07:00
< / details >