# AlgoDaily 01: Array Intersection

I’ve signed up to AlgoDaily as it seems like a fun way to get out some small blog posts on small coding tasks.

This is *AlgoDaily Day 1: Array Intersection*.

“Can you write a function that takes two inputs and returns their intersection? All element in the final result should be unique.”

```
const nums1 = [1, 2, 2, 1];
const nums2 = [2, 2];
intersection(nums1, nums2);
// [2]
```

“Here’s another one:”

```
const nums1 = [4, 9, 5];
const nums2 = [9, 4, 9, 8, 4];
intersection(nums1, nums2);
// [9, 4]
```

Here’s my first-thought naive implementation:

```
function intersection(setA, setB) {
return setA.reduce((intersected, x) => {
if (setB.includes(x) && !intersected.includes(x)) {
intersected.push(x);
}
return intersected;
}, []);
}
```

The idea is to filter `setA`

to those that are also in `setB`

, while also
ignoring duplicate items.

Testing it out:

```
intersection([1, 2, 2, 1], [2, 2]);
// Array [ 2 ]
intersection([4, 9, 5], [9, 4, 9, 8, 4]);
// Array [ 4, 9 ]
```

It might be more straightforward to just do a filter and then use a `Set`

to
remove the duplicates:

```
function intersection(arrayA, arrayB) {
return [...new Set(setA.filter(x => setB.includes(x)))]
}
```

That does seem a lot cleaner.

Going through the test cases in *AlgoDaily*:

```
intersection([6, 0, 12, 10, 16], [3, 15, 18, 20, 15]);
// Array []
intersection([1, 5, 2, 12, 6], [13, 10, 9, 5, 8]);
// Array [ 5 ]
intersection([4, 17, 4, 4, 15, 16, 17, 6, 7], [15, 2, 6, 20, 17, 17, 8, 4, 5]);
// Array(4) [ 4, 17, 15, 6 ]
intersection([3], [15]);
// Array []
intersection([2, 16, 8, 9], [14, 15, 2, 20]);
// Array [ 2 ]
```

It turns out that *AlgoDaily*‘s suggested solution is very similar to the
version using `Set()`

.