Paginate Javascript array
Я пытаюсь написать функцию Javascript, которая принимает параметры array
, page_size
и page_number
в качестве параметров и возвращает массив, который имитирует разбитые на страницы результаты:
paginate: function (array, page_size, page_number) {
return result;
}
например, когда:
array = [1, 2, 3, 4, 5],
page size = 2,
page_number = 2,
функция должна возвращать: [3, 4]
.
Любые идеи будут оценены.
Ответы
Ответ 1
Вы можете использовать Array.prototype.slice
и просто предоставить параметры для (start, end)
.
function paginate (array, page_size, page_number) {
--page_number; // because pages logically start with 1, but technically with 0
return array.slice(page_number * page_size, (page_number + 1) * page_size);
}
console.log(paginate([1, 2, 3, 4, 5, 6], 2, 2));
console.log(paginate([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], 4, 1));
Ответ 2
Другой подход, который вы можете использовать, - это использование .filter, смотрите:
const paginate = function (array, index, size) {
// transform values
index = Math.abs(parseInt(index));
index = index > 0 ? index - 1 : index;
size = parseInt(size);
size = size < 1 ? 1 : size;
// filter
return [...(array.filter((value, n) => {
return (n >= (index * size)) && (n < ((index+1) * size))
}))]
}
var array = [
{id: "1"}, {id: "2"}, {id: "3"}, {id: "4"}, {id: "5"}, {id: "6"}, {id: "7"}, {id: "8"}, {id: "9"}, {id: "10"}
]
var transform = paginate(array, 2, 5);
console.log(transform) // [{"id":"6"},{"id":"7"},{"id":"8"},{"id":"9"},{"id":"10"}]
Ответ 3
Вы можете использовать Array.filter() с помощью его второго параметра (индекса текущего элемента, обрабатываемого в массиве).
Вам также понадобится текущая выбранная страница и количество элементов на странице для отображения, чтобы вы могли найти минимальный и максимальный индекс необходимых элементов.
const indexMin = selectedPage * elementsPerPage;
const indexMax = indexMin + elementsPerPage;
const paginatedArray = arrayToPaginate.filter(
(x, index) => index >= indexMin && index < indexMax
);
Обновление значения selectedPage и/или elementsPerPage позволит вернуть правильные элементы для отображения.