Есть массив данных в котором может находиться не ограниченное кол-во объектов. Хочу написать функцию которая будет возвращать каждые 10 элементов массива. То есть первые 10 потом следующие 10 и т.д. По сути это обычная пагинация.
Мой пример не корректно работает, точнее возвращает но не совсем то что мне необходимо.
const demoDMS = [
{id: 1, quantity: 6436},
{id: 2, quantity: 3131},
{id: 3, quantity: 23},
{id: 4, quantity: 123},
{id: 5, quantity: 3213},
{id: 6, quantity: 322},
{id: 7, quantity: 55},
{id: 8, quantity: 334},
{id: 9, quantity: 13},
{id: 10, quantity: 1414},
{id: 11, quantity: 22},
{id: 12, quantity: 23},
{id: 13, quantity: 424},
{id: 14, quantity: 3232},
{id: 15, quantity: 525},
{id: 16, quantity: 222},
{id: 17, quantity: 123},
{id: 18, quantity: 3213},
{id: 19, quantity: 4124},
{id: 20, quantity: 132},
{id: 21, quantity: 1234},
{id: 22, quantity: 5325},
{id: 23, quantity: 6462},
{id: 24, quantity: 6472},
{id: 25, quantity: 232},
{id: 26, quantity: 5346},
{id: 27, quantity: 5464},
{id: 28, quantity: 12362},
{id: 29, quantity: 8657},
{id: 30, quantity: 9587}
];
function rebaseDMSelements(page) {
const count = 10;
let data = demoDMS
.filter((i, index) => (page * count > index + 1 && index + 1 < page * count))
if (page * count < demoDMS.length) {
this.rebaseDMSelements(page + 1)
}
console.log(`page number: ` + page, 'elements: ' + data.length)
}
rebaseDMSelements(1);
Если нужно получать страницы строго по порядку, то можно использовать генератор:
const demoDMS = [
{id: 1, quantity: 6436},
{id: 2, quantity: 3131},
{id: 3, quantity: 23},
{id: 4, quantity: 123},
{id: 5, quantity: 3213},
{id: 6, quantity: 322},
{id: 7, quantity: 55},
{id: 8, quantity: 334},
{id: 9, quantity: 13},
{id: 10, quantity: 1414},
{id: 11, quantity: 22},
{id: 12, quantity: 23},
{id: 13, quantity: 424},
{id: 14, quantity: 3232},
{id: 15, quantity: 525},
{id: 16, quantity: 222},
{id: 17, quantity: 123},
{id: 18, quantity: 3213},
{id: 19, quantity: 4124},
{id: 20, quantity: 132},
{id: 21, quantity: 1234},
{id: 22, quantity: 5325},
{id: 23, quantity: 6462},
{id: 24, quantity: 6472},
{id: 25, quantity: 232},
{id: 26, quantity: 5346},
{id: 27, quantity: 5464},
{id: 28, quantity: 12362},
{id: 29, quantity: 8657},
{id: 30, quantity: 9587}
];
function * getPage() {
const PAGESIZE = 10;
let currentPage = 0;
while (true) {
let curPage = demoDMS.slice(currentPage * PAGESIZE, (currentPage + 1) * PAGESIZE)
currentPage++;
yield curPage;
}
}
let page = getPage();
console.log(page.next().value);
console.log(page.next().value);
console.log(page.next().value);
Если не по порядку, то тоже можно, но немного сложнее.
Мой пример ... возвращает но не совсем то
Ваш пример вообще ничего не возвращает. Обратите внимание на отсутствие в коде слова return
.
Это два раза повторенное условие с переставленными левой и правой частями
(page * count > index + 1 && index + 1 < page * count)
что проверяет?
Решил свой пример довольно просто. Переписав немного формулу.
const demoDMS = [{
id: 1,
quantity: 6436
},
{
id: 2,
quantity: 3131
},
{
id: 3,
quantity: 23
},
{
id: 4,
quantity: 123
},
{
id: 5,
quantity: 3213
},
{
id: 6,
quantity: 322
},
{
id: 7,
quantity: 55
},
{
id: 8,
quantity: 334
},
{
id: 9,
quantity: 13
},
{
id: 10,
quantity: 1414
},
{
id: 11,
quantity: 22
},
{
id: 12,
quantity: 23
},
{
id: 13,
quantity: 424
},
{
id: 14,
quantity: 3232
},
{
id: 15,
quantity: 525
},
{
id: 16,
quantity: 222
},
{
id: 17,
quantity: 123
},
{
id: 18,
quantity: 3213
},
{
id: 19,
quantity: 4124
},
{
id: 20,
quantity: 132
},
{
id: 21,
quantity: 1234
},
{
id: 22,
quantity: 5325
},
{
id: 23,
quantity: 6462
},
{
id: 24,
quantity: 6472
},
{
id: 25,
quantity: 232
},
{
id: 26,
quantity: 5346
},
{
id: 27,
quantity: 5464
},
{
id: 28,
quantity: 12362
},
{
id: 29,
quantity: 8657
},
{
id: 30,
quantity: 9587
}
];
function rebaseDMSelements(page) {
const count = demoDMS.length; //всего записей
const cnt = 10; //сколько отображаем сначала
const cnt_page = Math.ceil(count / cnt); //кол-во страниц
let data = demoDMS.filter((i, index) => ((page - 1) * cnt <= index && index + 1 <= page * cnt));
if (page !== cnt_page) {
rebaseDMSelements(page + 1)
}
console.log('page: ' + page, 'count: ' + data.length);
}
rebaseDMSelements(1);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
ребят, есть 2 таблицы, в 1ой юзер устанавливает для себя теги, во 2ой вывод новостей (с определенными тегами), если какой то из тегов найдет у юзера...
хочу при создания новости, на сайте, добавлять к ней тегиПользователь который зарегистрировался выбирает теги, которые ему интересны
Задача: отправить видеопоток с вэбки клиента на серверКод клиента:
На обычной версии сайта реализован календарь и по клику на дату выводится список данных, связанных с этой датойВозможно ли такое реализовать...