Mapped array difference
JavaScript, Array · Oct 19, 2020

Returns the difference between two arrays, after applying the provided function to each array element of both.
- Create a
Set
by applyingfn
to each element inb
. - Use
Array.prototype.map()
to applyfn
to each element ina
. - Use
Array.prototype.filter()
in combination withfn
ona
to only keep values not contained inb
, usingSet.prototype.has()
.
const differenceBy = (a, b, fn) => { const s = new Set(b.map(fn)); return a.map(fn).filter(el => !s.has(el)); }; differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); // [1] differenceBy([{ x: 2 }, { x: 1 }], [{ x: 1 }], v => v.x); // [2]