deDupe (v2)

Revision 2 of this benchmark created on


Preparation HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

Setup

const teasers = [...Array(50).keys()].map((v)=>(
  { articleId: v }));


const felizTeasers = [
  { id: '1' },
  { id: '10'},
  { id: '99'},
  { id: '25' },
  { id: '90' },
  { id: '99'},
  { id: '12' },
  { id: '32' },
  { id: '51' },
  { id: '49' },
  { id: '62' },
]

Test runner

Ready to run.

Testing in
TestOps/sec
Filter & Some
const deduped = felizTeasers.filter((teaser) => !teasers.some((t) => t.id === String(teaser.articleId)));
ready
Using set
var teaserSet = new Set( teasers .map(t => `${t.articleId}`) );
var felizSet = new Set( felizTeasers .map(t => t.id) );

var dedupedSet = felizSet.difference(teaserSet);

const deduped = felizTeasers.filter( ( teaser ) => !dedupedSet.has(teaser.id));
ready
reduce & Set
var teaserSet = new Set( teasers.map(t => `${t.articleId}`) );

const deduped2 = felizTeasers.reduce( ( acc, ft ) => teaserSet.has(ft.id) ? acc : [...acc, ft], [] );
ready
Reduce & some
const deduped2 = felizTeasers.reduce( ( acc, ft ) => teasers.some(({articleId})=>ft.id === `${articleId}`) ? acc : [...acc, ft], [] );
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.