← Усі задачіNode.js · Junior
Пагінація з query-параметрів
API отримує ?page=2&limit=10 - тобто рядки. Напишіть paginate(items, query), що повертає { data, page, limit, total, totalPages }.
За замовчуванням page = 1, limit = 10. Невалідне значення (не ціле, менше за 1, не число) замінюється значенням за замовчуванням, а limit обмежений зверху 100, щоб клієнт не витягнув усю таблицю за раз. Сторінка за межами даних дає порожній data.
Ctrl+Enter - запустити тести. Tab - відступ; щоб вийти з редактора клавіатурою, натисніть Esc, а потім Tab. Код зберігається в цьому браузері.
Тести (6)
const items = Array.from({ length: 25 }, (_, i) => i + 1); expect(paginate(items, { page: '2', limit: '10' })).toEqual({ data: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], page: 2, limit: 10, total: 25, totalPages: 3 });
const items = Array.from({ length: 25 }, (_, i) => i + 1); expect(paginate(items, { page: '3', limit: '10' }).data).toEqual([21, 22, 23, 24, 25]);
const items = [1, 2, 3]; expect(paginate(items, {})).toEqual({ data: [1, 2, 3], page: 1, limit: 10, total: 3, totalPages: 1 });
const items = [1, 2, 3]; expect(paginate(items, { page: 'abc', limit: '-5' })).toEqual({ data: [1, 2, 3], page: 1, limit: 10, total: 3, totalPages: 1 }); expect(paginate(items, { page: '1.5' }).page).toBe(1);
const items = Array.from({ length: 500 }, (_, i) => i); const result = paginate(items, { limit: '1000' }); expect(result.limit).toBe(100); expect(result.data).toHaveLength(100);
const result = paginate([1, 2], { page: '5', limit: '10' }); expect(result.data).toEqual([]); expect(result.totalPages).toBe(1); expect(paginate([], {}).totalPages).toBe(0);