← Усі задачіJavaScript · Middle
memoize: кешування результатів
Напишіть функцію memoize(fn), яка повертає версію fn із кешем: під час повторного виклику з тими самими аргументами результат береться з кешу, а fn не викликається.
Аргументи - примітиви, їх може бути кілька. m(1) і m("1") - різні виклики. Результат undefined теж треба кешувати.
Ctrl+Enter - запустити тести. Tab - відступ; щоб вийти з редактора клавіатурою, натисніть Esc, а потім Tab. Код зберігається в цьому браузері.
Тести (5)
const f = fn((n) => n * 2); const m = memoize(f); expect(m(2)).toBe(4); expect(m(2)).toBe(4); expect(f).toHaveBeenCalledTimes(1);
const f = fn((a, b) => a + b); const m = memoize(f); m(1, 2); m(1, 2); m(2, 1); expect(f).toHaveBeenCalledTimes(2);
const f = fn((x) => typeof x); const m = memoize(f); expect(m(1)).toBe('number'); expect(m('1')).toBe('string'); expect(f).toHaveBeenCalledTimes(2);
const f = fn(() => undefined); const m = memoize(f); m(5); m(5); expect(f).toHaveBeenCalledTimes(1);
const a = memoize((x) => x + 1); const b = memoize((x) => x + 2); expect(a(1)).toBe(2); expect(b(1)).toBe(3);