← Alle AufgabenJavaScript · Middle

memoize: Ergebnisse cachen

Schreib eine Funktion memoize(fn), die eine gecachte Version von fn liefert: ein wiederholter Aufruf mit denselben Argumenten liefert das gecachte Ergebnis, ohne fn aufzurufen.

Die Argumente sind Primitive, und es können mehrere sein. m(1) und m("1") sind verschiedene Aufrufe. Auch ein Ergebnis undefined muss gecacht werden.

Tests (5)

  1. const f = fn((n) => n * 2);
    const m = memoize(f);
    expect(m(2)).toBe(4);
    expect(m(2)).toBe(4);
    expect(f).toHaveBeenCalledTimes(1);
  2. const f = fn((a, b) => a + b);
    const m = memoize(f);
    m(1, 2); m(1, 2); m(2, 1);
    expect(f).toHaveBeenCalledTimes(2);
  3. const f = fn((x) => typeof x);
    const m = memoize(f);
    expect(m(1)).toBe('number');
    expect(m('1')).toBe('string');
    expect(f).toHaveBeenCalledTimes(2);
  4. const f = fn(() => undefined);
    const m = memoize(f);
    m(5); m(5);
    expect(f).toHaveBeenCalledTimes(1);
  5. const a = memoize((x) => x + 1);
    const b = memoize((x) => x + 2);
    expect(a(1)).toBe(2);
    expect(b(1)).toBe(3);