forked from freeCodeCamp/freeCodeCamp
-
Notifications
You must be signed in to change notification settings - Fork 0
Algorithm Sorted Union
Rafael J. Rodriguez edited this page May 23, 2016
·
7 revisions
- The program has to return a new array of unique values from two original arrays in the order they show up. So there is not sorting required, and no duplicates.
- Since you have no idea how many parameters were passed, it would be best to loop through the
argumentsbefore looping through the arrays.
- I used loops, you can use something else like map, reduce or others if you want.
- You will have to check if the current value is already on the array to be returned for every value.
Solution ahead!
function uniteUnique(arr1, arr2, arr3) {
// Creates an empty array to store our final result.
var finalArray = [];
// Loop through the arguments object to truly made the program work with two or more arrays
// instead of 3.
for (var i = 0; i < arguments.length; i++) {
var arrayArguments = arguments[i];
// Loops through the array at hand
for (var j = 0; j < arrayArguments.length; j++) {
var indexValue = arrayArguments[j];
// Checks if the value is already on the final array.
if (finalArray.indexOf(indexValue) < 0) {
finalArray.push(indexValue);
}
}
}
return finalArray;
}
// test here
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);🚀 Run Code
- Check comments in code.
function uniteUnique() {
var concatArr = [];
var i = 0;
while (arguments[i]){
concatArr = concatArr.concat(arguments[i]); i++;
}
uniqueArray = concatArr.filter(function(item, pos) {
return concatArr.indexOf(item) == pos;
});
return uniqueArray;
}
// test here
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);🚀 Run Code
- Number of arguments can change dynamically so we don't need to bother providing our func with args at all
- we use a while loop to concatanate all the arguments into one Array called
concatArr - we use
filterto remove the duplicate elements by checking the index of each element and removing same elements with different positions - ordering will be preserved as we didn't mess with it
function uniteUnique(arr1, arr2, arr3) {
var newArr;
//Convert the arguments object into an array
var args = Array.prototype.slice.call(arguments);
//Use reduce function to flatten the array
newArr = args.reduce(function(arrA,arrB){
//Apply filter to remove the duplicate elements in the array
return arrA.concat(arrB.filter(function(i){
return arrA.indexOf(i) === -1;
}));
});
return newArr;
}
// test here
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);🚀 Run Code
If you found this page useful, you can give thanks by copying and pasting this on the main chat: thanks @Rafase282 @sabahang @coded9 for your help with Algorithm: Sorted Union
NOTE: Please add your username only if you have added any relevant main contents to the wiki page. (Please don't remove any existing usernames.)
Learn to code and help nonprofits. Join our open source community in 15 seconds at http://freecodecamp.com
Follow our Medium blog
Follow Quincy on Quora
Follow us on Twitter
Like us on Facebook
And be sure to click the "Star" button in the upper right of this page.
New to Free Code Camp?
JS Concepts
JS Language Reference
- arguments
- Array.prototype.filter
- Array.prototype.indexOf
- Array.prototype.map
- Array.prototype.pop
- Array.prototype.push
- Array.prototype.shift
- Array.prototype.slice
- Array.prototype.some
- Array.prototype.toString
- Boolean
- for loop
- for..in loop
- for..of loop
- String.prototype.split
- String.prototype.toLowerCase
- String.prototype.toUpperCase
- undefined
Other Links