--- title: Diff Two Arrays ---   Remember to use <a>**`Read-Search-Ask`**</a> if you get stuck. Try to pair program  and write your own code  ###  Problem Explanation: Check two arrays and return a new array that contains only the items that are not in either of the original arrays. #### Relevant Links * <a href='https://devdocs.io/javascript/statements/for' target='_blank' rel='nofollow'>for Loop (Devdocs)</a> * <a href='https://devdocs.io/javascript/global_objects/array/includes' target='_blank' rel='nofollow'>Array.prototype.includes (Devdocs)</a> * <a href='https://devdocs.io/javascript/global_objects/array/filter' target='_blank' rel='nofollow'>Array.prototype.filter (Devdocs)</a> * <a href='https://devdocs.io/javascript/global_objects/array/concat' target='_blank' rel='nofollow'>Array.prototype.concat (Devdocs)</a> ##  Hint: 1 Merge the list to make it easy to compare functions. > _try to solve the problem now_ ##  Hint: 2 Use filter to get the new array, you will need to create a callback function. > _try to solve the problem now_ ##  Hint: 3 The best way to go about the callback function is to check if the number from the new merged array is not in **both** original arrays and return it. > _try to solve the problem now_ ## Spoiler Alert!  **Solution ahead!** ##  Basic Code Solution (Imperative Solution): ```javascript function diffArray(arr1, arr2) { var newArr = []; function onlyInFirst(first, second) { // Looping through an array to find elements that don't exist in another array for (var i=0;i<first.length;i++) { if (second.indexOf(first[i]) === -1) { // Pushing the elements unique to first to newArr newArr.push(first[i]); } } } onlyInFirst(arr1, arr2); onlyInFirst(arr2, arr1); return newArr; } diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]); ```  <a href="https://repl.it/CLme/0">Run Code</a> ### Code Explanation: Read the comments in the code. #### Relevant Links * <a href='https://devdocs.io/javascript/statements/for' target='_blank' rel='nofollow'>for Loop (Devdocs)</a> ##  Intermediate Code Solution (Declarative Solution): ```javascript function diffArray(arr1, arr2) { return arr1 .concat(arr2) .filter( item => !arr1.includes(item) || !arr2.includes(item) ) } diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]); ```  <a href="https://repl.it/CNYb/0">Run Code</a> ### Code Explanation: Explain solution here and add any relevant links #### Relevant Links * <a href='https://devdocs.io/javascript/global_objects/array/concat' target='_blank' rel='nofollow'>Array.prototype.concat (Devdocs)</a> * <a href='https://devdocs.io/javascript/global_objects/array/filter' target='_blank' rel='nofollow'>Array.prototype.filter (Devdocs)</a> * <a href='https://devdocs.io/javascript/global_objects/array/includes' target='_blank' rel='nofollow'>Array.prototype.includes (Devdocs)</a> ##  Advanced Code Solution (Declarative Solution): function diffArray(arr1, arr2) { return arr1 .filter(el => !arr2.includes(el)) .concat( arr2.filter(el => !arr1.includes(el)) ) } diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);  <a href="https://repl.it/CNYU/0">Run Code</a> ### Code Explanation: Explain solution here and add any relevant links ##  Advanced Code Solution Alternative (Declarative Solution): function diffArray(arr1, arr2) { return [ ...diff(arr1, arr2), ...diff(arr2, arr1) ] function diff(a, b) { return a.filter(item => b.indexOf(item) === -1); } } #### Relevant Links * <a href='https://devdocs.io/javascript/global_objects/array/includes' target='_blank' rel='nofollow'>Array.prototype.includes (Devdocs)</a> * <a href='https://devdocs.io/javascript/global_objects/array/filter' target='_blank' rel='nofollow'>Array.prototype.filter (Devdocs)</a> * <a href='https://devdocs.io/javascript/global_objects/array/concat' target='_blank' rel='nofollow'>Array.prototype.concat (Devdocs)</a> ##  NOTES FOR CONTRIBUTIONS: *  **DO NOT** add solutions that are similar to any existing solutions. If you think it is **_similar but better_**, then try to merge (or replace) the existing similar solution. * Add an explanation of your solution. * Categorize the solution in one of the following categories -- **Basic**, **Intermediate** and **Advanced**. 