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

113
Vistas
Combinar objetos sucintamente como parámetros en la función

Tengo una función que toma dos objetos como parámetros y luego compara esos dos objetos, recursivamente, para producir un nuevo objeto. Ahora estoy configurando algunas pruebas para esta función. Si quiero agregar un nodo a la raíz de uno de los objetos, sobre la marcha, de manera sucinta, puedo hacer esto:

 diff(oldObj, {...newObj, testRootProp: 'testValue'});

Mi pregunta es, ¿hay alguna forma sucinta de agregar un nodo al objeto cuando el nodo al que quiero agregar no está en la raíz?

Por ejemplo, digamos que quiero tomar este objeto:

 { id: 1, name: "John" associates: [ {name: "Samantha"}, {name: "Jonah"}, ] }

Y producir esto:

 { id: 1, name: "John" associates: [ {name: "Samantha"}, {name: "Jonah", member: false}, // this has changed ] }

¿Hay alguna manera sucinta de que pueda hacerlo con mi función diff(oldObj, newObj) , haciendo este cambio sobre la marcha por lo que paso, en lugar de tener que pasar todo el objeto nuevo como segundo parámetro?

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

0

Puede agregar un parámetro a diff, que especificaría en qué lugar del objeto de destino colocar el valor adicional.

 const location = { name: 'Arbys', hours: { monday: {open: '8:00 AM', close: '10:00 PM'}, tuesday: {open: '8:00 AM', close: '10:00 PM'}, wednesday: {open: '8:00 AM', close: '10:00 PM'}, thursday: {open: '8:00 AM', close: '10:00 PM'}, friday: {open: '8:00 AM', close: '10:00 PM'}, saturday: {open: '8:00 AM', close: '10:00 PM'}, }, }; const newLocation = diff( location, { open: "10:00 AM", close: "9:00 PM" }, { path: 'hours.sunday' } ); // newLocation // { // name: 'Arbys', // hours: { // monday: {open: '8:00 AM', close: '10:00 PM'}, // tuesday: {open: '8:00 AM', close: '10:00 PM'}, // wednesday: {open: '8:00 AM', close: '10:00 PM'}, // thursday: {open: '8:00 AM', close: '10:00 PM'}, // friday: {open: '8:00 AM', close: '10:00 PM'}, // saturday: {open: '8:00 AM', close: '10:00 PM'}, // sunday: { open: "10:00 AM", close: "9:00 PM" }, // }, // }

Su ejemplo es engañoso porque necesita cambiar algo dentro de una matriz.

 const person = { id: 1, name: "John", associates: [ {name: "Samantha"}, {name: "Jonah"}, ], }; const newPerson = diff( person, false, { path: '[associates].member', finders: [ (node) => node['name'] === 'Jonah', ], } );

El tercer parámetro especifica cómo colocar los nuevos valores false . Dice:

  1. En el nivel superior del objeto de destino, hay una matriz llamada associates .
  2. Use la primera función en la matriz de finders para encontrar los objetos a los que queremos agregar.
  3. Agregue una clave de member a los objetos encontrados con el valor false .

De esta forma, puede especificar cualquier lugar en el objeto de destino para colocar el nuevo valor.

 const college = { students: [ /* ... */ ], // ... }; const mutatedCollege = diff( college, { name: 'Randy', id: '12345' }, { path: '[students].[courses].professor', finders: [ (student) => student.isFullTime, (course) => course.hours > 3, ], }, );

Por supuesto, la persona que llama aún puede omitir el tercer parámetro y simplemente fusionar los objetos:

 const a = {foo: 'x'); const b = {bar: 'y'); const c = diff(a, b); // c // { // foo: 'x', // bar: 'y', // }
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