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

154
Vistas
Combine valores de matriz anidados opcionales para crear un nuevo objeto

Hay varios campos en un objeto como este.

 { "image-processing": { "type": "lib", "data": { "files": [ { "file": "libs/photography/processing/.babelrc", "hash": "62d50f586b2880f9d58ca4e9a84914c6a0d4936d" }, { "file": "libs/photography/processing/src/lib/processing.ts", "hash": "a285d3554f264cc60f35bef6180298badb0478d1", "deps": [ "npm:gm", "npm:mongodb" ] } ] } }, "image-processing-2": { "type": "lib", "data": { "files": [ { "file": "libs/photography/processing/.babelrc", "hash": "62d50f586b2880f9d58ca4e9a84914c6a0d4936d", "deps": [ "npm:gm", "npm:faker" ] }, { "file": "libs/photography/processing/src/lib/processing.ts", "hash": "a285d3554f264cc60f35bef6180298badb0478d1", "deps": [ "npm:gm", "npm:mongodb" ] } ] } } }

Solo necesito el tipo y el contenido de data.files.deps como objeto de valor para la clave. Como puede ver, cada archivo tiene una matriz de deps opcional. Todos los valores de deps deben fusionarse.

Así que el resultado debería ser:

 { "image-processing": { type: "lib", packages: [ "npm:gm", "npm:mongodb" ] }, "image-processing-2": { type: "lib", packages: [ "npm:faker", "npm:gm", "npm:mongodb" ] } }

Intenté iterar a través del objeto, pero esto sobrescribiría el valor en lugar de agregar nuevos nombres de paquetes al valor:

 const result = {} Object.entries(data).map(([key, value]) => { result[key].type = value.type result[key].packages = value?.data?.files.map(d => d.deps) })
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Use flatMap en lugar de map para que tenga una matriz aplanada de cadenas de dependencia, y alterne con la matriz vacía para que las propiedades .deps no definidas no causen problemas.

 const data={"image-processing":{type:"lib",data:{files:[{file:"libs/photography/processing/.babelrc",hash:"62d50f586b2880f9d58ca4e9a84914c6a0d4936d"},{file:"libs/photography/processing/src/lib/processing.ts",hash:"a285d3554f264cc60f35bef6180298badb0478d1",deps:["npm:gm","npm:mongodb"]}]}},"image-processing-2":{type:"lib",data:{files:[{file:"libs/photography/processing/.babelrc",hash:"62d50f586b2880f9d58ca4e9a84914c6a0d4936d",deps:["npm:gm","npm:faker"]},{file:"libs/photography/processing/src/lib/processing.ts",hash:"a285d3554f264cc60f35bef6180298badb0478d1",deps:["npm:gm","npm:mongodb"]}]}}}; const output = Object.fromEntries( Object.entries(data).map(([key, value]) => [ key, { type: 'lib', packages: [...new Set(value.data.files.flatMap(file => file.deps ?? []))] } ]) ); console.log(output);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Según sus nuevos comentarios, solo para separar un poco la lógica:

Repita las entradas de Object.entries para obtener un par clave/valor (el valor es el objeto), y luego repita los archivos de cada objeto. Si hay alguna dependencia, filter las " map ", luego asigne esa matriz y cree una nueva con los nombres actualizados.

Agregue esa matriz a la matriz de packages .

Finalmente, aplane la matriz de paquetes, elimínela creando un nuevo conjunto a partir de ella y luego extiéndala nuevamente en una matriz como el valor del objeto de paquetes que luego agrega al objeto de salida usando la clave.

 const data={"image-processing":{type:"lib",data:{files:[{file:"libs/photography/processing/.babelrc",hash:"62d50f586b2880f9d58ca4e9a84914c6a0d4936d"},{file:"libs/photography/processing/src/lib/processing.ts",hash:"a285d3554f264cc60f35bef6180298badb0478d1",deps:["npm:gm","npm:mongodb"]}]}},"image-processing-2":{type:"lib",data:{files:[{file:"libs/photography/processing/.babelrc",hash:"62d50f586b2880f9d58ca4e9a84914c6a0d4936d",deps:["npm:gm","npm:faker"]},{file:"libs/photography/processing/src/lib/processing.ts",hash:"a285d3554f264cc60f35bef6180298badb0478d1",deps:["npm:gm","npm:mongodb"]}]}}}; // Output object const out = {}; // Iterate over the object entries for (const [key, obj] of Object.entries(data)) { // Destructure the type, and the files // array from each object const { type, data: { files } } = obj; const packages = []; // Iterate over each `files` array for (const file of files) { if (file.deps) { // `filter` out the "npm" names, and // then `map` over that array to update the names const list = file.deps .filter(dep => dep.startsWith('npm:')) .map(dep => dep.replace('npm:', '')); // Bang that completed array into `packages` packages.push(list); } } // Finally create a new key/value on the output // object by setting the value as an object // with `type`, and the flattened, deduped packages array out[key] = { type, packages: [...new Set(packages.flat())] }; } console.log(out);

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