Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

154
Views
Objeto de desestructuración con matriz interna sin todas las claves

Tengo un objeto como este:

 const objBefore: { "id": "3pa99f64-5717-4562-b3fc-2c963f66afa1", "number": "5000", "enabled": true, "classes": [ { "id": "2fc87f64-5417-4562-b3fc-2c963f66afa4", "name": "General" }, { "id": "7ffcada8-0215-4fb0-bea9-2266836d3b18", "name": "Special" }, { "id": "6ee973f7-c77b-4738-b275-9a7299b9b82b", "name": "Limited" } ] }

Usando es6, quiero tomar todo en el objeto excepto la clave de nombre de la matriz de clases internas para pasarlo a una API.

Asi que:

 { "id": "3pa99f64-5717-4562-b3fc-2c963f66afa1", "number": "5000", "enabled": true, "classes": [ {"id": "2fc87f64-5417-4562-b3fc-2c963f66afa4"}, {"id": "7ffcada8-0215-4fb0-bea9-2266836d3b18"}, {"id": "6ee973f7-c77b-4738-b275-9a7299b9b82b"} ] }

Lo más cercano que obtuve fue: let {id, number, enabled, classes: [{id}]} = objBefore;

Pero solo me da una identificación en las clases. Intenté difundir arriba usando [...{id}] o [{...id}] . La misma cosa.

Me resulta difícil obtener el modelo mental correcto sobre cómo pensar en esto cuando se trata de múltiples niveles. En mi mente, cuando digo [...{id}] estoy pensando, "Quiero la propiedad id como un objeto en la matriz de clases externas, ¡pero dame cada id en la matriz!"

Claramente no estoy pensando en esto correctamente.

Lo probé usando el mapa para obtener esa parte, pero todavía tengo problemas para combinarlo con el original para producir el resultado deseado. por ejemplo:

 let classIds = objBefore.classes.map(({id}) => { return { id } })

(Usando la sintaxis del mapa, ¿cómo puedo desestructurar en la función las otras teclas que están un nivel más arriba?)

Para combinarlos comencé a probar cualquier cosa y todo, :

 let {id, number, enabled, classIds} = {objBefore, [...classIds]} // returns undefined for all

Preferiría hacerlo en una declaración. Pero si eso no es posible, ¿cuál es una forma limpia de hacerlo usando el mapa?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

No puedes desestructurar y mapear al mismo tiempo de la forma en que buscas hacerlo. El objetivo principal de la asignación de desestructuración es extraer datos de una matriz/objeto y no manipular datos. En su caso, como está buscando un objeto con las mismas claves/valores que su objeto original, solo con una matriz de classes diferente, en su lugar, sugeriría crear un nuevo objeto y distribuir ... el objeto original en eso. Luego, puede sobrescribir la matriz de classes con una versión asignada de esa matriz:

 const objBefore = { "id": "3pa99f64-5717-4562-b3fc-2c963f66afa1", "number": "5000", "enabled": true, "classes": [ { "id": "2fc87f64-5417-4562-b3fc-2c963f66afa4", "name": "General" }, { "id": "7ffcada8-0215-4fb0-bea9-2266836d3b18", "name": "Special" }, { "id": "6ee973f7-c77b-4738-b275-9a7299b9b82b", "name": "Limited" } ] }; const newObj = { ...objBefore, classes: objBefore.classes.map(({id}) => ({id})) }; console.log(newObj);

about 4 years ago · Juan Pablo Isaza Report

0

¿Qué tal usar un método de utilidad simple con desestructuración de objetos, operador de propagación y map

 const objBefore = { id: "3pa99f64-5717-4562-b3fc-2c963f66afa1", number: "5000", enabled: true, classes: [ { id: "2fc87f64-5417-4562-b3fc-2c963f66afa4", name: "General", }, { id: "7ffcada8-0215-4fb0-bea9-2266836d3b18", name: "Special", }, { id: "6ee973f7-c77b-4738-b275-9a7299b9b82b", name: "Limited", }, ], }; const process = ({ classes, ...rest }) => ({ ...rest, classes: classes.map(({ id }) => ({ id })), }); console.log(process(objBefore))

about 4 years ago · Juan Pablo Isaza Report

0

En una línea, podrías hacer esto:

 const objAfter = { ...objBefore, classes: objBefore.classes.map(item => ({ id: item.id })) };

O, si lo prefiere:

 const objAfter = {...objBefore, classes: objBefore.classes.map(({id}) => ({id}))};

No hay ninguna forma en la destrucción de objetos para copiar una matriz completa de objetos en una matriz diferente de objetos eliminando propiedades, por lo que usa .map() para eso.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!