Метод key() в библиотеке localForage
предназначен для получения имени ключа по его порядковому индексу в
хранилище. В отличие от методов, которые работают с конкретными ключами
(getItem(), setItem(),
removeItem()), данный метод позволяет обращаться к
структуре хранилища как к коллекции элементов и получать ключи по их
позиции.
Метод полезен в ситуациях, когда заранее неизвестны названия сохранённых записей и требуется последовательно перебрать содержимое базы данных.
Сигнатура метода выглядит следующим образом:
localforage.key(index)
где:
index — числовой индекс элемента;null, если элемент отсутствует.Каждая запись в localForage состоит из двух частей:
Например:
await localforage.setItem("user", { name: "Анна" });
await localforage.setItem("settings", { theme: "dark" });
await localforage.setItem("language", "ru");
После сохранения данных в хранилище находятся три записи:
| Ключ | Значение |
|---|---|
| user | объект пользователя |
| settings | настройки |
| language | язык |
Метод key() позволяет получить только имя ключа по его
порядковому номеру:
const firstKey = await localforage.key(0);
console.log(firstKey);
Результат:
"user"
Метод возвращает Promise.
Пример:
localforage.key(0)
.then(key => {
console.log(key);
});
Либо через современный синтаксис:
const key = await localforage.key(0);
console.log(key);
Если элемент существует:
"user"
Если индекс выходит за пределы диапазона:
null
Наиболее простой сценарий использования — получение первого ключа.
const key = await localforage.key(0);
console.log(key);
Результат:
"user"
Индекс всегда начинается с нуля.
Предположим, что хранилище содержит данные:
await localforage.setItem("user", {});
await localforage.setItem("settings", {});
await localforage.setItem("language", "ru");
Получение ключей:
console.log(await localforage.key(0));
console.log(await localforage.key(1));
console.log(await localforage.key(2));
Возможный вывод:
user
settings
language
Для нахождения последнего ключа удобно использовать метод
length().
const count = await localforage.length();
const lastKey = await localforage.key(count - 1);
console.log(lastKey);
Если в хранилище пять элементов:
5
то индекс последнего элемента будет:
4
Поскольку key() возвращает null при
отсутствии записи, можно легко проверить корректность индекса.
const key = await localforage.key(100);
if (key === null) {
console.log("Элемент не найден");
}
Такой подход особенно полезен при динамическом обходе данных.
Метод позволяет получить полный список ключей, если известно количество элементов.
const count = await localforage.length();
for (let i = 0; i < count; i++) {
const key = await localforage.key(i);
console.log(key);
}
Результат:
user
settings
language
Нередко требуется не только узнать ключи, но и получить связанные значения.
const count = await localforage.length();
for (let i = 0; i < count; i++) {
const key = await localforage.key(i);
const value = await localforage.getItem(key);
console.log(key, value);
}
Пример результата:
user {name: "Анна"}
settings {theme: "dark"}
language ru
Метод можно использовать для создания списка всех ключей.
const count = await localforage.length();
const keys = [];
for (let i = 0; i < count; i++) {
keys.push(await localforage.key(i));
}
console.log(keys);
Результат:
[
"user",
"settings",
"language"
]
Если ключи имеют определённую структуру, их можно фильтровать.
Например:
await localforage.setItem("user_1", {});
await localforage.setItem("user_2", {});
await localforage.setItem("config", {});
Поиск пользовательских записей:
const count = await localforage.length();
const userKeys = [];
for (let i = 0; i < count; i++) {
const key = await localforage.key(i);
if (key.startsWith("user_")) {
userKeys.push(key);
}
}
console.log(userKeys);
Результат:
[
"user_1",
"user_2"
]
Метод помогает удалять записи по индексам.
const key = await localforage.key(0);
if (key) {
await localforage.removeItem(key);
}
Сначала определяется имя ключа, затем удаляется связанное значение.
Хотя для обхода данных обычно удобнее применять
iterate(), иногда требуется именно доступ к индексам.
Пример комбинированного подхода:
const count = await localforage.length();
for (let i = 0; i < count; i++) {
const key = await localforage.key(i);
console.log(`Индекс: ${i}`);
console.log(`Ключ: ${key}`);
}
Такой способ позволяет явно контролировать порядок обхода.
Важно понимать, что порядок ключей зависит от используемого драйвера хранения:
В большинстве случаев элементы возвращаются в порядке добавления, однако библиотека не гарантирует одинаковое поведение во всех реализациях и браузерах.
Поэтому не рекомендуется использовать индекс как постоянный идентификатор записи.
Нежелательный подход:
const user = await localforage.key(5);
с ожиданием, что шестой элемент всегда будет одним и тем же объектом.
После удаления или добавления записей порядок может измениться.
Как и другие методы localForage, key() может завершиться
ошибкой.
Использование конструкции try...catch:
try {
const key = await localforage.key(0);
console.log(key);
}
catch (error) {
console.error(error);
}
Это особенно актуально при работе с IndexedDB и нестандартными ограничениями среды выполнения.
В библиотеке присутствуют два похожих метода:
| Метод | Назначение |
|---|---|
key(index) |
получение одного ключа по индексу |
keys() |
получение массива всех ключей |
Пример key():
const key = await localforage.key(1);
Пример keys():
const keys = await localforage.keys();
Результат:
[
"user",
"settings",
"language"
]
Если требуется один конкретный ключ по позиции, эффективнее
использовать key().
Если нужен полный список ключей, удобнее применять
keys().
async function showStorageContent() {
const count = await localforage.length();
for (let i = 0; i < count; i++) {
const key = await localforage.key(i);
const value = await localforage.getItem(key);
console.log(`Запись №${i}`);
console.log("Ключ:", key);
console.log("Значение:", value);
console.log("----------------");
}
}
Возможный вывод:
Запись №0
Ключ: user
Значение: {name: "Анна"}
----------------
Запись №1
Ключ: settings
Значение: {theme: "dark"}
----------------
Запись №2
Ключ: language
Значение: ru
Метод key() представляет собой инструмент
низкоуровневого доступа к структуре хранилища, позволяющий получать
имена ключей по индексам, выполнять последовательный обход записей,
формировать списки ключей, организовывать собственные механизмы
навигации по данным и комбинировать индексный доступ с другими методами
localForage для получения, изменения и удаления сохранённой
информации.