Run details:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
Chrome 131
Mac OS X 10.15.7
Desktop
one month ago
Test name Executions per second
conditional array.push 10360063.0 Ops/sec
set.add 34609856.0 Ops/sec
map.set overwrite 32412726.0 Ops/sec
Script Preparation code:
x
 
var array = [];
var set = new Set();
var map = new Map();
var existingItem1 = {};
var existingItem2 = {};
var existingItem3 = {};
var newItem1 = {};
var newItem2 = {};
var newItem3 = {};
for (let i = 0, item; i < 100; i++) {
  item = {index: i};
  array.push(item);
  set.add(item);
  map.set(item, 0);
}
array.push(existingItem1, existingItem2, existingItem3);
set.add(existingItem1); set.add(existingItem2); set.add(existingItem3);
map.set(existingItem1, 0); map.set(existingItem2, 0); map.set(existingItem3, 0);
Tests:
  • conditional array.push

     
    if (!array.includes(existingItem1)) {
      array.push(existingItem1);
    }
    if (!array.includes(newItem1)) {
      array.push(newItem1);
    }
    if (!array.includes(existingItem2)) {
      array.push(existingItem2);
    }
    if (!array.includes(newItem2)) {
      array.push(newItem2);
    }
    if (!array.includes(existingItem3)) {
      array.push(existingItem3);
    }
    if (!array.includes(newItem3)) {
      array.push(newItem3);
    }
  • set.add

     
    set.add(existingItem1);
    set.add(newItem1);
    set.add(existingItem2);
    set.add(newItem2);
    set.add(existingItem3);
    set.add(newItem3);
  • map.set overwrite

     
    map.set(existingItem1, 0);
    map.set(newItem1, 0);
    map.set(existingItem2, 0);
    map.set(newItem2, 0);
    map.set(existingItem3, 0);
    map.set(newItem3, 0);