Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как разбить массив на страницы

Короткий ответ

Страница 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

Функции из этого ответа

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.