Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

117
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda