Run details:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0
Firefox 136
Windows
Desktop
one month ago
Test name Executions per second
Array.includes, 20 elements 11460438.0 Ops/sec
Set.has, 20 elements 111400216.0 Ops/sec
Array to Set + Set.has, 10 000 elements 1195253.4 Ops/sec
Array to Set + Set.has x 1000, 20 elements 85031.2 Ops/sec
Array.includes x 1000, 20 elements 9160.9 Ops/sec
Script Preparation code:
x
 
function getArray(length) {
  const result = [];
  for (let i = 0; i < length; i++) {
    result.push(i + 'abc'); // In case the browser does some sort of optimization for arrays with only integers ¯\_(ツ)_/¯
  }
  return result;
}
function getRandomTargetElement(arrayLength) {
  const index = Math.floor(Math.random() * arrayLength);
  return index + 'abc';
}
array_small = getArray(20);
set_small = new Set(array_small);
Tests:
  • Array.includes, 20 elements

     
    array_small.includes(getRandomTargetElement(20));
  • Set.has, 20 elements

     
    set_small.has(getRandomTargetElement(20))
  • Array to Set + Set.has, 10 000 elements

     
    const target = getRandomTargetElement(10000);
    const set = new Set(array_small);
    set.has(target)
  • Array to Set + Set.has x 1000, 20 elements

     
    const set = new Set(array_small);
    for (let i = 0; i < 1000; i++) {
      const target = getRandomTargetElement(20);
      set.has(target)
    }
  • Array.includes x 1000, 20 elements

     
    for (let i = 0; i < 1000; i++) {
      const target = getRandomTargetElement(20);
      array_small.includes(target)
    }