Javascript: нумерация страниц - PullRequest
0 голосов
/ 10 июля 2019

Я должен получить от и до индексов записей.

Идеи будут оценены.Например, если:

data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
records_per_page = 4

номера страниц будут 1,2,3,4,5 (последняя страница имеет одну запись).

Мне нужно получить индексы на основеномера страниц.

Например, я нажимаю «Страница 1», она должна дать мне 0 и 3, чтобы я отправил это с и на индексы на сервер, а затем он возвращает мне значения [1,2,3,4]

Если я щелкну страницу 2, она должна дать мне 4 и 7, чтобы сервер возвращал мне значения [5,6,7,8]

function(total, page_no){ 
 // Need to return the indices of the records
 return [from,to]
}

1 Ответ

1 голос
/ 10 июля 2019

Вы можете разбить массив на части только на первый и последний индексы каждого x количества элементов:

var data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
const size = 4

const getIndices = (d, p) => p && p <= Math.ceil(d.length / size) && d.reduce((a, o, i) => {
  const c = Math.floor(i / size);
  a[c] = [].concat((a[c] && a[c][0] || []), o);
  if(a[c].length === 1) a[c] = [a[c][0], a[c][0]]
  return a
}, [])[p - 1].map(i => --i)

for(var i = 1; i < Math.ceil(data.length / size) + 1; i++) {
  console.log(getIndices(data, i))
}

РЕДАКТИРОВАТЬ: Я только что понял, что это простая математическая задача. Используйте этот код вместо:

var length = 17
const size = 4

const getIndices = (p, s, l) => p && p <= Math.ceil(l / s) && [s * (p - 1), s * p > l - 1 ? l - 1 : s * p - 1]

for(var i = 1; i < Math.ceil(length / size) + 1; i++) {
  console.log(getIndices(i, size, length))
}

Второе редактирование:

var length = 17
const size = 4

const getIndices = (p, s, l) => +p && +p <= Math.ceil(l / s) && s * --p

for(var i = 1; i < Math.ceil(length / size) + 1; i++) {
  console.log(getIndices(i, size, length))
}

Обратите внимание, эта функция может быть намного короче, но я добавил 2 проверки ошибок: p проверяет, существует ли p на самом деле. && объединяет все условия, чтобы убедиться, что все они выполнены. p <= Math.ceil(d.length / size) проверяет, больше ли p, чем максимальное количество страниц. Следующая часть - это действительная логика, возвращающая индексы начала (и конца) страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...