Estoy buscando una forma rápida de obtener un elemento del almacenamiento local de Mozilla basado en el conocimiento parcial de una clave única. Tengo la siguiente estructura definida como la clave: valor
UUID1 : "BLABLABLA": UUID2 : Value
Donde la parte clave se ve así, por ejemplo:
ca4417f4-f83b-11eb-bf45-ffc420139ccb:BLABLABLA:e1d26c40-f83b-11eb-81c0-fbcc16bf6bdb
El valor es solo una cadena larga.
¿Cuál sería la forma más rápida de encontrar una clave ÚNICA de localStorage basada solo en uno de los dos UUID, es decir, UUID1 o UUID2, luego obtener la cadena de clave completa y luego usar
localStorage.getItem para devolver su valor
tal vez usando Object.entries(localStorage)
?
¿Un ejemplo de código sería realmente apreciado?
Ampliando su concepto Object.entries() puede hacer algo como:
// set a demo key/value localStorage.setItem('foobar', 100); const [wantedKey, wantedValue] = Object.entries(localStorage).find(([k,v])=> k.startsWith('foo')) console.log([wantedKey, wantedValue])
La interfaz de Storage
tiene una propiedad de length
que le indica cuántos elementos hay y un método key
que le proporciona la clave para el índice de elementos n . Entonces puede recorrer para encontrar la clave con un bucle for
:
let key; for (let n = 0, len = localStorage.length; n < len; ++n) { const thisKey = localStorage.key(n); if (thisKey.includes("BLABLABLA")) { // found it key = thisKey; break; } } if (key) { const value localStorage.getItem(key); // ... }
Tenga en cuenta que las soluciones que usan Object.keys
, Object.entries
, etc. no funcionarán de manera confiable con todas las claves de almacenamiento; por ejemplo, la clave "length"
no funcionará correctamente, aunque está bien usar "length'
como clave con getItem
y setItem
Eso se debe a que la interfaz de Storage
ya define una propiedad llamada length
(la longitud de la lista de almacenamiento), por lo que no puede acceder a un elemento almacenado con la clave "length'
usando localStorage.length
, tiene que localStorage.getItem("length")
. Object.keys
y Object.entries
dejarán de lado esas entradas de almacenamiento. (Aparte de que parece que hay un error extraño en Chrome alrededor de la "key"
). Lo anterior funciona de manera confiable con length
, key
y otras claves similares (pero en realidad la length
y la key
son las más problemáticas).
Sin embargo, en su caso particular , sabe que la clave no es length
ni key
ni ninguna de las otras cosas en Storage.prototype
, por lo que podría crear una matriz de claves a través de Object.keys
y usar find
para encontrar la clave:
// Read the disclaimers above const key = Object.keys(localStorage).find(key => key.includes("BLABLABLA")); if (key) { const value localStorage.getItem(key); // ... }
... o use Object.entries
para crear una matriz de matrices como muestra charlietfl . Solo tenga en cuenta la advertencia.