Array.prototype.includes vs native obj lookup

Benchmark created on


Setup

const createArr = (length) => Array.from(
	{ length },
	(_, index) => index % 2 === 0
);

const items = {
	100: createArr(100),
	1000: createArr(1000),
	10000: createArr(10000),
	100000: createArr(100000),
	1000000: createArr(1000000),
};

const toSelected = items => items
	.map((val, idx) => ({ val, idx }))
	.filter(v => !!v.val)
	.map(v => v.idx);

const selected = {
	100: toSelected(items[100]),
	1000: toSelected(items[1000]),
	10000: toSelected(items[10000]),
	100000: toSelected(items[100000]),
	1000000: toSelected(items[1000000]),
};

const toObj = items => items
	.reduce((acc, cur, idx) => {
		if (cur) {
			acc[idx] = cur;	
		}
		return acc;
	}, {});

const map = {
	100: toObj(items[100]),
	1000: toObj(items[1000]),
	10000: toObj(items[10000]),
	100000: toObj(items[100000]),
	1000000: toObj(items[1000000]),
};

Test runner

Ready to run.

Testing in
TestOps/sec
Array.prototype.includes 100
items[100].forEach((item, idx) => {
	return selected[100].includes(item);
});
ready
map 100
items[100].forEach((item, idx) => {
	return map[100][idx];
});
ready
Array.prototype.includes 1000
items[1000].forEach((item, idx) => {
	return selected[1000].includes(item);
});
ready
map 1000
items[1000].forEach((item, idx) => {
	return map[1000][idx];
});
ready
Array.prototype.includes 10000
items[10000].forEach((item, idx) => {
	return selected[10000].includes(item);
});
ready
map 10000
items[10000].forEach((item, idx) => {
	return map[10000][idx];
});
ready
Array.prototype.includes 100000
items[100000].forEach((item, idx) => {
	return selected[100000].includes(item);
});
ready
map 100000
items[100000].forEach((item, idx) => {
	return map[100000][idx];
});
ready
Array.prototype.includes 1000000
items[1000000].forEach((item, idx) => {
	return selected[1000000].includes(item);
});
ready
map 1000000
items[1000000].forEach((item, idx) => {
	return map[1000000][idx];
});
ready

Revisions

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