new Set()
from each array to get the unique values of each one after applying fn
to them.Array.prototype.filter()
on each of them to only keep values not contained in the other.const symmetricDifferenceBy = (a, b, fn) => { const sA = new Set(a.map(v => fn(v))), sB = new Set(b.map(v => fn(v))); return [...a.filter(x => !sB.has(fn(x))), ...b.filter(x => !sA.has(fn(x)))]; };
symmetricDifferenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); // [ 1.2, 3.4 ] symmetricDifferenceBy( [{ id: 1 }, { id: 2 }, { id: 3 }], [{ id: 1 }, { id: 2 }, { id: 4 }], i => i.id ); // [{ id: 3 }, { id: 4 }]
Subscribe to get resources directly to your inbox. You won't receive any spam! ✌️