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 getArrays(length) {
    const result = new Array(length).fill(0);;
    for (let i = 0; i < length; i++) {
        result[i] = (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 = getArrays(100);
array_large = getArrays(10000);
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)
    }
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    Array.find, 100 elements
    Map.get, 100 elements
    Array.find, 1 000 000 elements
    Map.get, 1 000 000 elements
    Array to Map + Map.get, 1 lookup
    Array to Map + Map.get, 10 lookups
    Array to Map + Map.get, 100 lookups
    Array.find, 10 lookups
    Array.find, 100 lookups

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 3 months ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0
Opera 114 on Windows
View result in a separate tab
Test name Executions per second
Array.find, 100 elements 10705738.0 Ops/sec
Map.get, 100 elements 58079804.0 Ops/sec
Array.find, 1 000 000 elements 29872.3 Ops/sec
Map.get, 1 000 000 elements 60034052.0 Ops/sec
Array to Map + Map.get, 1 lookup 299120.8 Ops/sec
Array to Map + Map.get, 10 lookups 294243.6 Ops/sec
Array to Map + Map.get, 100 lookups 234919.8 Ops/sec
Array.find, 10 lookups 683254.4 Ops/sec
Array.find, 100 lookups 67373.5 Ops/sec