Sets have an intersect()
method because it's assumed that if you need to find the intersection of values, these values should be unique. This makes sense, but you don't have to convert your lists into sets just for the sake of finding intersecting values.
You can intersect list values using the reduce()
method. Let's create a function that will intersect the list values given to it:
const intersect = (...lists) => { const [head] = lists; const tail = Seq(lists.slice(1)); return head.reduce((result, value) => tail .map(list => list.includes(value)) .includes(false) ? result : result.add(value), Set() ); };
The intersect()
function accepts an arbitrary number of lists, using the rest parameter syntax (...
). The first step is to get thehead and tail of these lists. The head
constant represents the first list while the tail
constant represents the remaining lists.
We'll use head
as the list to iterate over...