Как разбить массив на страницы
Короткий ответ
Страница page начинается с (page - 1) * perPage. slice() берёт нужную часть:
const items = Array.from({ length: 23 }, (_, i) => i + 1);
const perPage = 10;
const page = 3;
const pageItems = items.slice((page - 1) * perPage, page * perPage);
console.log(pageItems.join(', '));Результат:
21, 22, 23Число страниц
Округлите деление вверх, чтобы учесть последнюю неполную страницу:
const total = 23;
const perPage = 10;
console.log(Math.ceil(total / perPage));Результат:
3Вспомогательная функция
Возвращайте элементы вместе с информацией о страницах:
const paginate = (items, page, perPage) => ({
items: items.slice((page - 1) * perPage, page * perPage),
page,
pages: Math.ceil(items.length / perPage),
});
const result = paginate(['a', 'b', 'c', 'd', 'e'], 2, 2);
console.log(result.items.join(', '), `page ${result.page} of ${result.pages}`);Результат:
c, d page 2 of 3Частая ошибка
Номера страниц на сайте обычно начинаются с 1, а индексы массива — с 0. Без - 1 первая страница пропадает:
const items = ['a', 'b', 'c', 'd'];
console.log(items.slice(1 * 2, 2 * 2).join(', '));Результат:
c, dФункции из этого ответа
- Array.prototype.slice — Возвращает часть массива.
- Math.ceil — Округляет число вверх до целого.