There are many use cases where knowing if an array is a subset of another can be quite useful - and although usually immediately obvious to the human eye, it can be difficult to evaluate in code.
In the code below, arr2
is a subset of arr1
, but arr3
is not.
let arr1 = [ 'a', 'b', 'c' ];
let arr2 = [ 'b', 'c' ];
let arr3 = [ 'c', 'd' ];
If we want to find out if an array is a subset of another array, the best way to evaluate this is by using the array every method. This method iterates through each element in an array and performs a test on it. If every element in the array passes that test, then the overall every
method will return true.
For each evaluation, we have a "parent" array, and a "subset" array - where we want to check if the "subset" array is fully contained within the "parent" array.
To evaluate if one array is a subset of another, we can run every
on the each element on the "subset" array. Within the every
function, we can test if the "parent" array contains each element in the "subset" array. If it does, then every
will return true
. Otherwise, it'll return false
.
This can be accomplished easily with a function like the one shown below - checkSubset
will return true
should the subsetArray
be fully contained within the parentArray
:
let arr1 = [ 'a', 'b', 'c' ];
let arr2 = [ 'b', 'c' ];
let arr3 = [ 'c', 'd' ];
let checkSubset = (parentArray, subsetArray) => {
return subsetArray.every((el) => {
return parentArray.includes(el)
})
}
checkSubset(arr1, arr2); // returns true
checkSubset(arr1, arr3); // returns false
Top comments (3)
this is a great way to use Set(), thanks!
If you want it to not only check for subset,but also for same order,use:
let isSubsetAndInSameOrder = (parentArray, subsetArray) => {
return subsetArray.every((el, index) => {
return parentArray[index] === el;
});
You don't want to search at the beginning of the array every time you search an element in a subarray to make sure it exists in the array right?