## DEV Community

Johnny Simpson

Posted on • Originally published at fjolt.com

# Javascript: Check if an Array is a Subset of Another Array

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
``````

Johnny Simpson

this is a great way to use Set(), thanks!

development-vargamarcel

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; }); ```

Revenity • Edited

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?

``````function isSub<T = any>(parent: T[], sub: T[]) {
let currentIndex = -1;
for (const element of sub)
while (parent[++currentIndex] != element)
if (currentIndex >= parent.length)
return false;
return true;
}
``````