-
Notifications
You must be signed in to change notification settings - Fork 341
Bonfire Symmetric Difference
Created by Rafase282
Github | FreeCodeCamp | CodePen | LinkedIn | Website | E-Mail
- Difficulty: 4/5
Create a function that takes two or more arrays and returns an array of the symmetric difference of the provided arrays.
The mathematical term symmetric difference refers to the elements in two sets that are in either the first or second set, but not in both.
Remember to use Read-Search-Ask if you get stuck. Try to pair program. Write your own code.
function sym(args) {
return arguments;
}
sym([1, 2, 3], [5, 2, 1, 4]);
Symmetric Difference is the difference between two sets.
So in the Symmetric Difference Bonfire you would work through the arrays of numbers something like this -
sym(A, B, C)
Translates to sym(sym(A,B),C)
Or in plain English - First find the Symmetric Difference of Set A and Set B. Then find the Symmetric Difference of this new set and Set C.
So -
sym([1, 2, 5], [2, 3, 5], [3, 4, 5])
would equal
[1,4,5]
Here's a nice video tutorial (with an awful fake British accent!) -
YouTube - Symmetric Difference
The arguments object is not an Array. It is similar to an Array, but does not have any Array properties except length. For example, it does not have the pop method. However it can be converted to a real Array:
var args = Array.prototype.slice.call(arguments);
Write a function that returns the symmetric difference of array1 and array2.
yourFunction([1, 2, 3], [2, 4, 6])
must return [1, 3, 4, 6]
Use Array.prototype.reduce
along with yourFunction to repeat the process on multiple arguments
Something a bit strange about the definition of symmetric difference is that if one identical item occurs in three different sets, it is a member of the symmetric difference. An example is easier to explain:
a = [1, 2, 5]
b = [2, 3, 5]
c = [3, 4, 5]
sym(a, b) = [1, 3]
sym([1, 3], c) = [1, 4, 5]
Solution ahead!
function sym() {
// Convert the argument object into a proper array
var args = Array.prototype.slice.call(arguments);
// Return the symmetric difference of 2 arrays
var getDiff = function(arr1, arr2) {
// Returns items in arr1 that don't exist in arr2
function filterFunction(arr1, arr2) {
return arr1.filter(function(item) {
return arr2.indexOf(item) === -1;
});
}
// Run filter function on each array against the other then get unique values
return filterFunction(arr1, arr2)
.concat(filterFunction(arr2, arr1))
.filter(function(item, idx, arr) {
// Keep any items that are unique - the index of the current item === index of the first occurrence in the array
return arr.indexOf(item) === idx;
});
};
// Reduce all arguments getting the difference of them
return args.reduce(getDiff, []);
}
- Read comments in code.
Thanks for visiting, if you like this please feel free to star my repo, follow me or even contact me about contributing as it will be a lot of work and having help would be cool.
- HTML5 and CSS
- Responsive Design with Bootstrap
- Gear up for Success
- jQuery
- Basic JavaScript
- Object Oriented and Functional Programming
- Basic Algorithm Scripting
- Basic Front End Development Projects
- Intermediate Algorithm Scripting
- JSON APIs and Ajax
- Intermediate Front End Development Projects
- Claim Your Front End Development Certificate
- Upper Intermediate Algorithm Scripting
- Automated Testing and Debugging
- Advanced Algorithm Scripting
- AngularJS (Legacy Material)
- Git
- Node.js and Express.js
- MongoDB
- API Projects
- Dynamic Web Applications
- Claim Your Back End Development Certificate
- Greefield Nonprofit Project 1
- Greefield Nonprofit Project 2
- Legacy Nonprofit Project 1
- Legacy Nonprofit Project 2
- Claim your Full Stack Development Certification
- Whiteboard Coding Interview Training
- Critical Thinking Interview Training
- Mock Interview 1
- Mock Interview 2
- Mock Interview 3