ObjectArray

Benchmark created on


Setup

class ObjectArray1 extends Array {
  #map;

  constructor(length) {
    super(length);
  }

  indexBy(key) {
    this.#map = new Map([...this.map((i) => [i[key], i])]);
    return this;
  }

  get(index) {
    return this.#map.get(index);
  }
}

class ObjectArray2 extends Array {
  #map;

  constructor(length) {
    super(length);
  }

  indexBy(key) {
    this.#map = new Map();
    for (let i of this) {
    	this.#map.set(i[key], i);
    }
    return this;
  }

  get(index) {
    return this.#map.get(index);
  }
}

class ObjectArray3 extends Array {
  #map;

  constructor(length) {
    super(length);
  }

  indexBy(key) {
    this.#map = new Map();
    for (let i of this) this.#map.set(i[key], i);
    return this;
  }

  get(index) {
    return this.#map.get(index);
  }
}

const arr = Array(10000).fill(0).map((_, id) => ({ id , value: Math.random() }));

Test runner

Ready to run.

Testing in
TestOps/sec
1
const map = ObjectArray1.from(arr).indexBy('id');
const a = map.get(500);
ready
2
const map = ObjectArray2.from(arr).indexBy('id');
const a = map.get(500);
ready

Revisions

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