JavaScript - Write a function that takes two or more arrays and returns a new array of unique values
Write a function that takes two or more arrays and returns a new array of unique values in the order of the originally provided arrays.
- In other words, all values present from all arrays should be included in their original order, but with no duplicates in the final array.
- The unique numbers should be sorted by their original order, but the final array should not be sorted in numerical order.
- Check the assertion tests for example.
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]) should return [1, 3, 2, 5, 4].
Solution 1 Basic approach
function uniteUnique(arr) {
//create an empty array
var newArr = []
//loop through the arguments
for (var i = 0; i < arguments.length; i++) {
var newArgs = arguments[i];
//loop through the array of arguments
for (var j = 0; j < newArgs.length; j++) {
var finalArgs = newArgs[j]
//check if the value is already on newArr if not then push
if (newArr.indexOf(finalArgs) < 0) {
newArr.push(finalArgs);
}
}
}
return newArr;
}
console.log(uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]));
Output:
[ 1, 2, 3, 4, 5 ]
Solution 2 Gives a sorted result in ascending order
function union(arra1) {
var newArr = []
for (var i = 0; i < arguments.length; i++) {
newArr = newArr.concat(arguments[i]);
}
var obj = {};
for (var i = arra1.length - 1; i >= 0; --i)
obj[arra1[i]] = arra1[i];
for (var i = newArr.length - 1; i >= 0; --i)
obj[newArr[i]] = newArr[i];
var res = [];
for (var n in obj) {
if (obj.hasOwnProperty(n))
res.push(obj[n]);
}
return res;
}
console.log(union([1, 3, 2], [5, 2, 1, 4], [2, 1]));
Output:
[ 1, 2, 3, 4, 5 ]