Библиотека Idb-keyval предоставляет удобный
интерфейс для работы с IndexedDB через простые асинхронные методы.
Основными инструментами для получения данных являются методы
get, set, del, но для фильтрации
большого объема информации особенно полезны методы
values и
entries.
valuesМетод values() возвращает асинхронный итератор всех
значений, хранящихся в базе данных. Он позволяет обходить коллекцию
значений без необходимости загружать весь объект в память сразу. Это
особенно удобно при работе с большими объемами данных.
Синтаксис:
import { values } from 'idb-keyval';
for await (const value of values()) {
console.log(value);
}
values() возвращает асинхронный итератор
(AsyncIterable) значений.for await...of позволяет перебирать
данные по мере их поступления из IndexedDB.Пример фильтрации по значению:
import { values } from 'idb-keyval';
async function getFilteredValues(predicate) {
const result = [];
for await (const value of values()) {
if (predicate(value)) {
result.push(value);
}
}
return result;
}
// Использование
const usersOver30 = await getFilteredValues(user => user.age > 30);
console.log(usersOver30);
В данном примере фильтруются объекты, где поле age
больше 30. Такой подход позволяет создавать гибкие условия фильтрации
без загрузки всей базы данных в память.
entriesМетод entries() возвращает асинхронный итератор пар
[ключ, значение]. Этот метод особенно полезен, когда
необходимо не только значение, но и его ключ для последующих
операций.
Синтаксис:
import { entries } from 'idb-keyval';
for await (const [key, value] of entries()) {
console.log(key, value);
}
entries() предоставляет полный доступ к ключам и
значениям.Пример фильтрации по ключу и значению:
import { entries } from 'idb-keyval';
async function getFilteredEntries(keyPredicate, valuePredicate) {
const result = [];
for await (const [key, value] of entries()) {
if (keyPredicate(key) && valuePredicate(value)) {
result.push([key, value]);
}
}
return result;
}
// Использование
const filtered = await getFilteredEntries(
key => key.startsWith('user_'),
user => user.active === true
);
console.log(filtered);
В этом примере выбираются только активные пользователи, чьи ключи
начинаются с user_.
values() и entries() совместимы с
любыми пользовательскими структурами данных, включая объекты и
массивы.Пример комбинации фильтрации и подсчета:
import { values } from 'idb-keyval';
async function countActiveUsers() {
let count = 0;
for await (const user of values()) {
if (user.active) count++;
}
return count;
}
const activeUserCount = await countActiveUsers();
console.log(activeUserCount);
values и
entries работают асинхронно, что предотвращает блокировку
интерфейса.[ключ, значение] по условию без создания
полной копии базы.true или
false.Методы values и entries в
Idb-keyval обеспечивают эффективный и гибкий инструмент
для фильтрации данных, позволяя обрабатывать большие базы и получать
только нужную информацию без перегрузки памяти и блокировки
интерфейса.