string search in array vs object vs set (v4)

Revision 4 of this benchmark created on


Setup

function uuid() {
  return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
    (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
  );
}

var numIdsToPopulate = 300;
var allIds = Array(numIdsToPopulate).fill().map(() => uuid());

var idsToStore = allIds.slice(0, 150);

var idSet = new Set(idsToStore);

var obj = allIds.reduce((acc, curr) => {
	acc[curr] = true;
    return acc;
}, {});

Test runner

Ready to run.

Testing in
TestOps/sec
array search
var item = allIds[Math.floor(Math.random()*allIds.length)];

allIds.some((id) => id === item);
ready
object search
var item = allIds[Math.floor(Math.random()*allIds.length)];

obj.hasOwnProperty(item);
ready
Set search
var item = allIds[Math.floor(Math.random()*allIds.length)];

idSet.has(item);
ready

Revisions

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