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

133
Vistas
Combinar objetos en javascript en uno

Mi problema es que tengo un objeto inicial con datos en la función. La función recibe parámetros con valores que están en este objeto inicial . Necesito actualizar el objeto inicial cada vez con los datos, que provienen de params .

El código:

 export function saveLocalStorage(params = {}) { let state = { firstName: '', lastName: '', role: '', idToken: '', auth: false, id: '', email: '', phone: '', organizationId: '', lastVisit: '', } localStorage.setItem('donisi-new', JSON.stringify(state)) }

los parámetros tienen los mismos nombres que los nombres en el objeto inicial , ejemplo:

 saveLocalStorage({ firstName, lastName, role, organizationId, auth: true, idToken, lastVisit: moment(new Date()), })

Entonces, por ejemplo, la primera vez que recibí el primer objeto con parámetros, por ejemplo:

 saveLocalStorage({ firstName: 'La La', lastName: 'Bla Bla' })

y la segunda vez que recibí un objeto con parámetros:

 saveLocalStorage({ role: 'admin', phone: '+111111111' })

¿Cómo actualizar el estado inicial y no eliminar los valores y solo actualizarlos ?

Gracias a todos.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Esta es una función que uso para fusionar 2 objetos de JavaScript:

 function mergeObjects(obj, src) { for (var key in src) { if (src.hasOwnProperty(key)) obj[key] = src[key]; } return obj; }

Así que si tuvieras estos 2 objetos:

 var obj1 = {name: 'Bob', age: 30}; var obj2 = {name: 'Steve'};

Y ejecutó la función:

 mergeObjects(obj1, obj2);

Volvería:

 {name: 'Steve', age: 30}
about 4 years ago · Juan Pablo Isaza Denunciar

0

Para lograr este comportamiento, puede utilizar el operador de expansión (...) de ES6 para fusionar objetos. Combinará los dos objetos. Los nuevos campos se agregarán desde ambos objetos y los existentes se actualizarán.

Simplemente reemplace su

 localStorage.setItem('donisi-new', JSON.stringify(state))

con

 localStorage.setItem('donisi-new', JSON.stringify({...state, ...params}))

El orden de estado y parámetros es importante aquí. Este pedido significa que el objeto de estado se actualizará con nuevos valores que existen en el objeto de parámetros.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Parte del problema con la actualización del estado inicial es que tiene el state definido en la función, por lo que esos valores no se pueden actualizar. Una forma de abordar esto es extraer el state en su propio archivo y luego hacer referencia a él en su función.

 // state.js export default { firstName: '', lastName: '', role: '', idToken: '', auth: false, id: '', email: '', phone: '', organizationId: '', lastVisit: '', };

Luego, en su función, puede hacer referencia a ella y actualizarla según sea necesario. La próxima vez que llame a saveLocalStorage , el estado se habrá actualizado desde la llamada anterior.

 import * as state from "./state.js"; export function saveLocalStorage(params = {}) { /* Update state with values from params example for (const [key, value] of Object.entries(params)) { state[key] = value; } */ localStorage.setItem('donisi-new', JSON.stringify(state)) }

Dejo parte de esto en un comentario porque quizás tengas algo más en mente para actualizar el estado o antes de fusionarte.

about 4 years ago · Juan Pablo Isaza 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