patternjavascriptMinor
Removing duplicates from multiple arrays at once
Viewed 0 times
oncearraysremovingmultiplefromduplicates
Problem
This (working) code is supposed to return a new array that consists of elements of both arrays that were not marked as duplicates (find duplicates in both arrays, remove such elements from both arrays and create an array from the leftovers, if any)
Is there a way to simplify this function?
Is there a way to simplify this function?
function diff(arr1, arr2) {
var arr1_filtered, arr2_filtered;
arr1_filtered = arr1.filter(function (v) {
return arr2.indexOf(v) == -1;
});
arr2_filtered = arr2.filter(function (v) {
return arr1.indexOf(v) == -1;
});
return arr1_filtered.concat(arr2_filtered);
}Solution
Create a function on
Array.prototype that'll accept an array and filter the array by checking if the element is in the other array.// Define a function on Array prototype
Array.prototype.arrayDiff = function (arr) {
return this.filter(function (v) {
return arr.indexOf(v) === -1;
});
};
function diff(arr1, arr2) {
// 1. Remove elements that are in arr2 from arr1
// i.e. arr1.arrayDiff(arr2)
// 2. Remove elements that are in arr1 from arr2
// i.e. arr2.arrayDiff(arr1)
// 3. Concat the result of both the arrays
return arr1.arrayDiff(arr2).concat(arr2.arrayDiff(arr1));
}// Define a function on Array prototype
Array.prototype.removeDuplicates = function(arr) {
return this.filter(function(v) {
return arr.indexOf(v) === -1;
});
};
function diff(arr1, arr2) {
return arr1.removeDuplicates(arr2).concat(arr2.removeDuplicates(arr1));
}
var arr = diff([1, 3, 4, 2, 5], [2, 45, 7, 42, 1, 6]);
document.write(JSON.stringify(arr));Code Snippets
// Define a function on Array prototype
Array.prototype.arrayDiff = function (arr) {
return this.filter(function (v) {
return arr.indexOf(v) === -1;
});
};
function diff(arr1, arr2) {
// 1. Remove elements that are in arr2 from arr1
// i.e. arr1.arrayDiff(arr2)
// 2. Remove elements that are in arr1 from arr2
// i.e. arr2.arrayDiff(arr1)
// 3. Concat the result of both the arrays
return arr1.arrayDiff(arr2).concat(arr2.arrayDiff(arr1));
}Context
StackExchange Code Review Q#111290, answer score: 2
Revisions (0)
No revisions yet.