Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

286
Vistas
¿Cómo puedo eliminar una matriz JSON específica (consultas) incrustada dentro de otra matriz JSON (f7Contacts), ambas guardadas en una sola clave localSorage?

Tengo una clave de almacenamiento local (f7Contacts) almacenada como una matriz JSON, como debería ser. Sé cómo eliminar la clave completa usando localStorage.removeItem("myKey"); .

Mi matriz, como puede ver, está formada por un conjunto de matrices JSON incrustadas en su interior. Existe el más amplio llamado f7Contacts y dentro de él hay algunos subarreglos (por nombrarlos de alguna manera) llamadosvisitings y consultas . Ahora, lo que estoy tratando de eliminar no es un solo elemento de ninguna de las matrices JSON ni toda la matriz f7Contacts , sino la submatriz JSON llamada consultas .

Lo he intentado de muchas maneras, pero no pude obtener un código que funcione.

Esto es lo que tengo hasta ahora:

Mi matriz stringify se ve así:

(ahora he actualizado la cadena para que se parezca más a mi caso real porque las respuestas propuestas logran borrar las consultas solo en uno de los contactos, y en un caso borra las consultas del primer contacto y borra el resto de los contactos. Nombré a ELISA y FRANK para que los diferencies. También actualicé mi Javascript y html como una mezcla de mi propio código y el de la respuesta de ЖнецЪ. Hice esto para mantener mi entorno consistente. Este código logró eliminar las consultas de el primer contacto pero también elimina el resto de los contactos ):

JAVASCRIPT

 document.addEventListener("DOMContentLoaded", function() { var contacts = [{ id: "95470e9e-ee5c-4467-9500-1fcbeae1b57c", hasPic: true, picId: 3, createdOn: "2021-08-01T17:31:32.230Z", firstName: "ELISA", company: "La Fábrica", job: "Barrendero", mobile: "+53555555", phone: "+5372222222", sms: "", email: "fulano@nauta.cu", madedate: "Invalid date", clinic: "2", gender: "M", birthday: "Invalid date", age: "47", visitings: [{ id: "1", vdate: "19/07/-2006 12:00 AM", pdcb: "Est officia dolorem ", vdiagnose: "Laborum Ea consecte", vrecom: "Mollit cillum sed pe", nextv: "Invalid date" }], consultas: [{ id: "1", ldate: "04/07/-1978 12:00 AM", lmotive: "Soluta cumque aspern", ldiagnose: "Quidem autem do ut o", ttest: "Rerum sint atque il", etest: "Officiis deserunt un", mtest: "Nihil a dolore rem s", nextv: "Invalid date" }, { id: "2", ldate: "04/04/-1991 12:00 AM", lmotive: "Eius in est enim no", ldiagnose: "In aliqua Sunt dol", ttest: "Sunt dolor eu sed N", etest: "Quia aut reprehender", mtest: "Unde libero autem an", nextv: "Invalid date" } ], isFavorite: true }, {id: "95470e9e-ee5c-4467-9500-1fcbeae1b57c", hasPic: true, picId: 3, createdOn: "2021-08-01T17:31:32.230Z", firstName: "FRANK", company: "La Fábrica", job: "Barrendero", mobile: "+53555555", phone: "+5372222222", sms: "", email: "fulano@nauta.cu", madedate: "Invalid date", clinic: "2", gender: "M", birthday: "Invalid date", age: "47", visitings: [{ id: "1", vdate: "19/07/-2006 12:00 AM", pdcb: "Est officia dolorem ", vdiagnose: "Laborum Ea consecte", vrecom: "Mollit cillum sed pe", nextv: "Invalid date" }], consultas: [{ id: "1", ldate: "04/07/-1978 12:00 AM", lmotive: "Soluta cumque aspern", ldiagnose: "Quidem autem do ut o", ttest: "Rerum sint atque il", etest: "Officiis deserunt un", mtest: "Nihil a dolore rem s", nextv: "Invalid date" }, { id: "2", ldate: "04/04/-1991 12:00 AM", lmotive: "Eius in est enim no", ldiagnose: "In aliqua Sunt dol", ttest: "Sunt dolor eu sed N", etest: "Quia aut reprehender", mtest: "Unde libero autem an", nextv: "Invalid date" } ], isFavorite: true }]; // Get from lS const lS = JSON.parse(localStorage.getItem('f7Contacts')); // DOM elements const cancelBtn = document.getElementById('dntdelete'); const deleteBtn = document.getElementById('delete'); const consultas = document.getElementById('consultas'); const json = document.getElementById('json'); function clearConsults(){ document.getElementById('confirm').style.display="block"; { function removeItem() { const lS = JSON.parse(localStorage.getItem('f7Contacts')); if (!lS) return; const obj = lS[0]; // Find 'consultas' key in the object const findKey = Object.keys(obj).find(key => key.includes('consultas')); if (findKey) { // Delete key from the object with array delete obj[findKey]; } // Back wraping the obj into array & put to the localStorage localStorage.setItem('f7Contacts', JSON.stringify([obj])); //set item back into storage } alert('CONSULTAS ELIMINADAS'); document.getElementById('confirm').style.display="none"; if (lS[0].consultas) { consultas.textContent = lS[0].consultas.length; } consultas.textContent = 0; json.textContent = JSON.stringify(obj, undefined, 2); } cancelBtn.addEventListener('click', dntdelete); deleteBtn.addEventListener('click', clearConsults); } }); document.getElementById('dntdelete').onclick = function(){ alert('OPERACIÓN CANCELADA'); document.getElementById('confirm').style.display="none"; return false; };

HTML

 <main> <div class="results"> <h4>Consultas<span id="consultas"></span></h4> </div> <div class="control-buttons"> <div id="confirm" style="display: none"> <button id="delete">Delete</button> <button id="dntdelete">Cancel</button> </div> <a onclick="clearConsults()">Delete Consultas</a><h3>SURE YOU WANT TO DELETE?</h3> </div> </main>

Debo dejar claro que esta clave localStorage (f7Contacts) está realmente almacenada por otro js dentro de la aplicación y si he incluido localStorage.setItem("f7Contacts", JSON.stringify(contacts)); al comienzo de mi código anterior es solo un intento de dejarlo claro. Y deje en claro también que hay varios contactos dentro de la cadena y la tarea es eliminar las consultas para todos ellos.

over 4 years ago · Santiago Trujillo
5 Respuestas
Responde la pregunta

0

No hay una API para realizar esa operación como se documenta aquí en MDN.

Pero puedes hacerlo tú mismo con algo como:

 // Original state const state = { id: 100, name: 'Karen', test: true <--- initial creation of key we'll delete } // Save state localStorage.setItem('state', JSON.stringify(state)) console.log(state) // Example of removing a single key from an object within localStorage const modifiedState = JSON.parse(localStorage.getItem('state')) // Delete the `test` key delete modifiedState.test // Update storage localStorage.setItem('state', JSON.stringify(modifiedState)) // Show the updated state directly from localStorage console.log(JSON.parse(localStorage.getItem('state')))
over 4 years ago · Santiago Trujillo Denunciar

0

cuando lee un elemento en particular de localStorage , devuelve una cadena, y no hay forma de eliminar algún elemento en particular de los datos guardados, pero puede convertir los datos guardados en un Objeto

y luego use el operador de delete para eliminar cualquier cosa de ese objeto

 // This is Sample Data for demonstration purposes // And from this sample data i want to remove this Gender item const data = { name: "Andrew", email: "example@example.com", gender: "male" } // Here you set your Data by Converting it into a String using JSON.stringify() localStorage.setItem('data', JSON.stringify(data)) console.log(localStorage.getItem('data')) // Prints out {"name":"Andrew","email":"example@example.com","gender":"male"} let storedData = localStorage.getItem('data') // Get Data from localStorage let newData = JSON.parse(storedData) // Convert it back into a object using JSON.parse() delete newData.gender // Then remove a item using delete operator localStorage.setItem('data', JSON.stringify(newData)) // Saving to LocalStorafe console.log(JSON.parse(localStorage.getItem('data'))) // Prints Out {name: "Andrew", email: "example@example.com"}

Compruebe esta imagen para la salida

Lea más sobre el operador de Delete en la documentación de MDN

Edite para eliminar el elemento que desea probar esto:

 var contacts = { f7Contacts: [{ "id": "95470e9e-ee5c-4467-9500-1fcbeae1b57c", "hasPic": true, "picId": 3, "createdOn": "2021-08-01T17:31:32.230Z", "firstName": "Fulano Menganejo Ciclanejo", "company": "La Fábrica", "job": "Barrendero", "mobile": "+53555555", "phone": "+5372222222", "sms": "", "email": "fulano@nauta.cu", "madedate": "Invalid date", "clinic": "2", "gender": "M", "birthday": "Invalid date", "age": "47", "visitings": [{ "id": "1", "vdate": "19/07/-2006 12:00 AM", "pdcb": "Est officia dolorem ", "vdiagnose": "Laborum Ea consecte", "vrecom": "Mollit cillum sed pe", "nextv": "Invalid date" }], "consultas": [{ "id": "1", "ldate": "04/07/-1978 12:00 AM", "lmotive": "Soluta cumque aspern", "ldiagnose": "Quidem autem do ut o", "ttest": "Rerum sint atque il", "etest": "Officiis deserunt un", "mtest": "Nihil a dolore rem s", "nextv": "Invalid date" }, {"id": "2", "ldate": "04/04/-1991 12:00 AM", "lmotive": "Eius in est enim no", "ldiagnose": "In aliqua Sunt dol", "ttest": "Sunt dolor eu sed N", "etest": "Quia aut reprehender", "mtest": "Unde libero autem an", "nextv": "Invalid date" }], "isFavorite":true }] }; console.log(contacts.f7Contacts[0].hasOwnProperty("consultas")); // Prints true delete contacts.f7Contacts[0].consultas console.log(contacts.f7Contacts[0].hasOwnProperty("consultas")); // Prints False

Así que ya te dije lo que hace el operador de delete , ¡ahora con solo usar eliminar puedes ver cómo puedes eliminar un elemento!

Explicación: Bueno Object.hasOwnProperty(property) simple devuelve true si ese objeto dado tiene una propiedad, en nuestro ejemplo es consultas y devuelve false si ese objeto no tiene una propiedad como esa.

Lea acerca Object.hasOwnProperty(property) en MDN Docs

over 4 years ago · Santiago Trujillo Denunciar

0

Actualizaciones: función de eliminación de llamadas al hacer clic en el botón y eliminar todas las consultas de F7Contacts.

 var contacts = [{ "id": "95470e9e-ee5c-4467-9500-1fcbeae1b57c", "hasPic": true, "picId": 3, "createdOn": "2021-08-01T17:31:32.230Z", "firstName": "Fulano Menganejo Ciclanejo", "company": "La Fábrica", "job": "Barrendero", "mobile": "+53555555", "phone": "+5372222222", "sms": "", "email": "fulano@nauta.cu", "madedate": "Invalid date", "clinic": "2", "gender": "M", "birthday": "Invalid date", "age": "47", "visitings": [{ "id": "1", "vdate": "19/07/-2006 12:00 AM", "pdcb": "Est officia dolorem ", "vdiagnose": "Laborum Ea consecte", "vrecom": "Mollit cillum sed pe", "nextv": "Invalid date" }], "consultas": [{ "id": "1", "ldate": "04/07/-1978 12:00 AM", "lmotive": "Soluta cumque aspern", "ldiagnose": "Quidem autem do ut o", "ttest": "Rerum sint atque il", "etest": "Officiis deserunt un", "mtest": "Nihil a dolore rem s", "nextv": "Invalid date" }, {"id": "2", "ldate": "04/04/-1991 12:00 AM", "lmotive": "Eius in est enim no", "ldiagnose": "In aliqua Sunt dol", "ttest": "Sunt dolor eu sed N", "etest": "Quia aut reprehender", "mtest": "Unde libero autem an", "nextv": "Invalid date" }], "isFavorite":true }] localStorage.setItem("f7Contacts", JSON.stringify(contacts));

Eliminar todas las consultas de F7Contacts:

 function removeItem() { var contacts = JSON.parse(localStorage.getItem("f7Contacts")) || {}; //fetch f7Contacts from storage for (var k = 0; k < contacts.length; k++) { delete contacts[k].consultas; } localStorage.setItem("f7Contacts", JSON.stringify(contacts)); }

Función de eliminación de llamadas al hacer clic en el botón:

 function clearConsults(){ console.log((localStorage.f7Contacts)); removeItem(); console.log((localStorage.f7Contacts)); }
over 4 years ago · Santiago Trujillo Denunciar

0

Si no me equivoco, entiendo que desea eliminar solo las consultas del localStorage . Creo que es mejor encontrar la clave del objeto con Object.keys y luego eliminar esa clave del objeto. ejemplo de trabajo

guión.js

 document.addEventListener('DOMContentLoaded', function () { var contacts = [ { id: '95470e9e-ee5c-4467-9500-1fcbeae1b57c', hasPic: true, picId: 3, createdOn: '2021-08-01T17:31:32.230Z', firstName: 'ELISA', company: 'La Fábrica', job: 'Barrendero', mobile: '+53555555', phone: '+5372222222', sms: '', email: 'fulano@nauta.cu', madedate: 'Invalid date', clinic: '2', gender: 'M', birthday: 'Invalid date', age: '47', visitings: [ { id: '1', vdate: '19/07/-2006 12:00 AM', pdcb: 'Est officia dolorem ', vdiagnose: 'Laborum Ea consecte', vrecom: 'Mollit cillum sed pe', nextv: 'Invalid date', }, ], consultas: [ { id: '1', ldate: '04/07/-1978 12:00 AM', lmotive: 'Soluta cumque aspern', ldiagnose: 'Quidem autem do ut o', ttest: 'Rerum sint atque il', etest: 'Officiis deserunt un', mtest: 'Nihil a dolore rem s', nextv: 'Invalid date', }, { id: '2', ldate: '04/04/-1991 12:00 AM', lmotive: 'Eius in est enim no', ldiagnose: 'In aliqua Sunt dol', ttest: 'Sunt dolor eu sed N', etest: 'Quia aut reprehender', mtest: 'Unde libero autem an', nextv: 'Invalid date', }, ], isFavorite: true, }, { id: '95470e9e-ee5c-4467-9500-1fcbeae1b57c', hasPic: true, picId: 3, createdOn: '2021-08-01T17:31:32.230Z', firstName: 'FRANK', company: 'La Fábrica', job: 'Barrendero', mobile: '+53555555', phone: '+5372222222', sms: '', email: 'fulano@nauta.cu', madedate: 'Invalid date', clinic: '2', gender: 'M', birthday: 'Invalid date', age: '47', visitings: [ { id: '1', vdate: '19/07/-2006 12:00 AM', pdcb: 'Est officia dolorem ', vdiagnose: 'Laborum Ea consecte', vrecom: 'Mollit cillum sed pe', nextv: 'Invalid date', }, ], consultas: [ { id: '1', ldate: '04/07/-1978 12:00 AM', lmotive: 'Soluta cumque aspern', ldiagnose: 'Quidem autem do ut o', ttest: 'Rerum sint atque il', etest: 'Officiis deserunt un', mtest: 'Nihil a dolore rem s', nextv: 'Invalid date', }, { id: '2', ldate: '04/04/-1991 12:00 AM', lmotive: 'Eius in est enim no', ldiagnose: 'In aliqua Sunt dol', ttest: 'Sunt dolor eu sed N', etest: 'Quia aut reprehender', mtest: 'Unde libero autem an', nextv: 'Invalid date', }, ], isFavorite: true, }, ]; // Get from lS const lS = JSON.parse(localStorage.getItem('f7Contacts')); // DOM elements const clearConsultsBtn = document.getElementById('clear-consults'); const confirmBtn = document.getElementById('confirm'); const createBtn = document.getElementById('create'); const cancelBtn = document.getElementById('dntdelete'); const deleteBtn = document.getElementById('delete'); const consultas = document.getElementById('consultas'); const controlBtns = document.querySelector('.control-buttons'); const json = document.getElementById('json'); // Check if not lS if (!lS) { localStorage.setItem('f7Contacts', JSON.stringify(contacts)); /// JUST FOR VISIBILITY let num = 0; for (const i of contacts) { num += i.consultas.length; consultas.textContent = num; } json.textContent = JSON.stringify(contacts, undefined, 2); } if (lS) { for (const i of lS) { if (!i.consultas) consultas.textContent = 0; } json.textContent = JSON.stringify(lS, undefined, 2); } function removeItem() { const lS = JSON.parse(localStorage.getItem('f7Contacts')); if (!lS) return; // Creating new array without 'consultas' const clearArray = lS.map(obj => { // Find 'consultas' key in the object const findKey = Object.keys(obj).find(key => key.includes('consultas')); if (findKey) { // Delete key from the object with array delete obj[findKey]; } return obj; // Returning object to array without 'consultas' }); // Put to the localStorage localStorage.setItem('f7Contacts', JSON.stringify(clearArray)); //set item back into storage alert('CONSULTAS ELIMINADAS'); controlBtns.style.display = 'none'; clearConsultsBtn.style.display = 'block'; /// JUST FOR VISIBILITY if (clearArray) { for (const i of clearArray) { if (!i.consultas) consultas.textContent = 0; } } json.textContent = JSON.stringify(clearArray, undefined, 2); } function addItem() { localStorage.setItem('f7Contacts', JSON.stringify(contacts)); /// JUST FOR VISIBILITY let num = 0; for (const i of contacts) { num += i.consultas.length; consultas.textContent = num; } json.textContent = JSON.stringify(contacts, undefined, 2); } function clearConsults() { alert('OPERACIÓN CANCELADA'); controlBtns.style.display = 'flex'; clearConsultsBtn.style.display = 'none'; } function cancel() { alert('OPERACIÓN CANCELADA'); controlBtns.style.display = 'none'; clearConsultsBtn.style.display = 'block'; } clearConsultsBtn.addEventListener('click', clearConsults); createBtn.addEventListener('click', addItem); cancelBtn.addEventListener('click', cancel); deleteBtn.addEventListener('click', removeItem); confirmBtn.addEventListener('click', clearConsults); });

índice.html

 <main> <div class="results"> <h4>Consultas arrays<span id="consultas"></span></h4> </div> <h3>SURE YOU WANT TO DELETE?</h3> <button id="clear-consults">Delete Consultas</button> <div class="control-buttons"> <button id="dntdelete">Cancel</button> <button id="delete">Delete</button> <button id="create">Create</button> </div> <div id="confirm"></div> <pre id="json"></pre> </main>

estilo.css

 * { margin: 0; padding: 0; box-sizing: border-box; font-family: serif; } body, html { padding: 20px; } main { min-width: 100%; display: grid; grid-template-rows: repeat(4, max-content); gap: 10px; justify-content: center; color: #4c5f6b; } .control-buttons { display: none; gap: 20px; } button { padding: 8px 15px; border: none; color: #4c5f6b; border-radius: 3px; cursor: pointer; } #cancel { background-color: #4c5f6b; } #delete { background-color: #89608e; color: whitesmoke; } #create { background-color: #6eaa8d; color: whitesmoke; } .results { display: flex; gap: 20px; } .results h4 { text-transform: lowercase; } .results span { width: 50px; margin-left: 5px; padding: 3px 9px; border: 2px solid #6eaa8d; } #confirm { display: none; } pre { font-size: 10px; }
over 4 years ago · Santiago Trujillo Denunciar

0

Paso 1: Obtenga sus datos de almacenamiento y analícelos en un objeto:

 let f7ContactsArray = JSON.parse(localStorage.getItem('f7Contacts'))

Paso 2: haga un bucle en su objeto JavaScript analizado para eliminar la matriz de consulatas:

 if(Array.isArray(f7ContactsArray)){ f7ContactsArray = f7ContactsArray.map(contact => { delete contact.consultas; //use object delete to remove the property return contact; }) }

Paso 3: reemplace la clave localStorage con una matriz de contactos actualizada:

 localStorage.setItem('f7Contacts', JSON.stringify(f7ContactsArray))

Usando un método simplemente haz algo como:

 const clearConsults = () => { let f7ContactsArray = JSON.parse(localStorage.getItem('f7Contacts')); if(Array.isArray(f7ContactsArray)){ f7ContactsArray = f7ContactsArray.map(contact => { delete contact.consultas; //use object delete to remove the property return contact; }); localStorage.setItem('f7Contacts', JSON.stringify(f7ContactsArray)) } } <main> <div class="results"> <h4>Consultas<span id="consultas"></span></h4> </div> <div class="control-buttons"> <div id="confirm" style="display: none"> <button id="delete">Delete</button> <button id="dntdelete">Cancel</button> </div> <a onclick="clearConsults()">Delete Consultas</a><h3>SURE YOU WANT TO DELETE?</h3> </div> </main>

NOTA: Asegúrese de que su archivo o método JavaScript esté incluido a través de la etiqueta de secuencia de comandos en su HTML

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda