Run details:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36
Chrome 132
Mac OS X 10.15.7
Desktop
one month ago
Test name Executions per second
Array.find, 100 elements 16615013.0 Ops/sec
Map.get, 100 elements 116870696.0 Ops/sec
Array.find, 1 000 000 elements 406.3 Ops/sec
Map.get, 1 000 000 elements 112878960.0 Ops/sec
Array to Map + Map.get, 1 lookup 496947.2 Ops/sec
Array to Map + Map.get, 10 lookups 486544.6 Ops/sec
Array to Map + Map.get, 100 lookups 400269.9 Ops/sec
Array.find, 10 lookups 1097007.6 Ops/sec
Array.find, 100 lookups 112100.0 Ops/sec
Script Preparation code:
x
 
function getRandomElement(id) {
  return {
    id,
    a: Math.random(),
    b: Math.random(),
    c: Math.random(),
  }
}
function getArray(length) {
  const result = [];
  for (let i = 0; i < length; i++) {
    result.push(getRandomElement(i))
  }
  
  return result;
}
function arrayToMap(array) {
  return new Map(array.map(el => [el.id, el]));
}
function getRandomInt(max) {
  return Math.floor(Math.random() * max);
}
array_small = getArray(100);
array_large = getArray(1000000);
map_small = arrayToMap(array_small);
map_large = arrayToMap(array_large);
Tests:
  • Array.find, 100 elements

     
    const target = getRandomInt(99);
    array_small.find(el => el.id === target);
  • Map.get, 100 elements

     
    const target = getRandomInt(99);
    map_small.get(target);
  • Array.find, 1 000 000 elements

     
    const target = getRandomInt(999999);
    array_large.find(el => el.id === target);
  • Map.get, 1 000 000 elements

     
    const target = getRandomInt(999999);
    map_large.get(target)
  • Array to Map + Map.get, 1 lookup

     
    const map = arrayToMap(array_small);
    const target = getRandomInt(9999);
    map.get(target);
  • Array to Map + Map.get, 10 lookups

     
    const map = arrayToMap(array_small);
    for (let i = 0; i < 10; i++) {
      const target = getRandomInt(9999);
      map.get(target);
    }
  • Array to Map + Map.get, 100 lookups

     
    const map = arrayToMap(array_small);
    for (let i = 0; i < 100; i++) {
      const target = getRandomInt(9999);
      map.get(target);
    }
  • Array.find, 10 lookups

     
    for (let i = 0; i < 10; i++) {
      const target = getRandomInt(9999);
      array_small.find(el => el.id === target)
    }
  • Array.find, 100 lookups

     
    for (let i = 0; i < 100; i++) {
      const target = getRandomInt(9999);
      array_small.find(el => el.id === target)
    }