[JavaScript] Set Difference of Two Arrays
Find the elements in one array but not in the other, i.e., set difference of two arrays. In mathematical term:
A − B = {x ∈ A and x ∉ B}
Try the following demo to get sense of the set difference:
Array A:Array B:
The idea is to convert the array B to the data structure of key-value pairs, i.e., hash table. The hash table in JavaScript is built-in object type. Then we check if items in array A is in the hash table. If not, append the item to the difference array, and return the difference array after finish.
The following is the code for the demo:
HTML:
Array A: <input type="text" name="arra" value="[1, 2, 3, 4, 5]"><br>
Array B: <input type="text" name="arrb" value="[2, 3, 5, 7, 11]"><br>
<br>
<button type="button" id="getDiff">Get A - B</button>
<input type="text" name="diff"><br>
JavaScript:
var arra = document.querySelector("input[name='arra']");
var arrb = document.querySelector("input[name='arrb']");
var diff = document.querySelector("input[name='diff']");
var btn = document.querySelector("#getDiff");
btn.addEventListener("click", function(e) {
var arrayA = eval(arra.value);
var arrayB = eval(arrb.value);
var arrayDiff = [];
var hashTable = {};
for (var i = 0; i < arrayB.length; i++) {
hashTable[arrayB[i]] = true;
}
for (var i = 0; i < arrayA.length; i++) {
if (!hashTable.hasOwnProperty(arrayA[i])) {
arrayDiff.push(arrayA[i]);
}
}
diff.value = JSON.stringify(arrayDiff);
});
Tested on: Chromium 64.0.3282.167 on Ubuntu 17.10 (64-bit)
References:
[1] | [JavaScript] Intersection of Two Arrays |
[2] | [JavaScript] Union of Two Arrays |