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

159
Vistas
Cómo calcular la diferencia de dos matrices con el mismo valor en la segunda posición

Tengo una cadena de salida git diff analizada en esta matriz, lo que me da todas las dependencias modificadas en un archivo package.json:

 const data = [ [ '-', '@date-io/moment', '1.3.13', '1', '3', '13' ], [ '+', '@date-io/moment', '1.3.14', '1', '3', '14' ], [ '-', '@emotion/react', '11.7.0', '11', '7', '0' ], [ '-', '@emotion/styled', '11.6.0', '11', '6', '0' ], [ '+', '@emotion/react', '11.8.2', '11', '8', '2' ], [ '+', '@emotion/styled', '11.8.1', '11', '8', '1' ] ]

El primer elemento ( + - me muestra si este cambio se agregó o eliminó. El segundo elemento es el nombre del paquete (este es el elemento que conecta dos matrices), y los siguientes campos me dan la versión. Ahora necesito iterar esta matriz para averiguar qué tipo de cambio de versión se ha realizado para cada paquete. Entonces la salida debería ser:

 { '@date-io/moment': 'patch', '@emotion/react': 'minor', '@emotion/styled': 'minor' }

Traté de obtener todos los paquetes haciendo

 const result = {} data.forEach(d => { result[d[1]] = bump // how to calculate `bump`? })

Pero esto no maneja + y - y no calcula el tipo de aumento de versión.

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

0

Usando Array.prototype.reduce para reducir, puede reducir la matriz a un objeto y para cada paquete use Array.prototype.find para encontrar el cambio correspondiente. Luego puede comparar las versiones y determinar su cambio.

 const data = [ [ '-', '@date-io/moment', '1.3.13', '1', '3', '13' ], [ '+', '@date-io/moment', '1.3.14', '1', '3', '14' ], [ '-', '@emotion/react', '11.7.0', '11', '7', '0' ], [ '-', '@emotion/styled', '11.6.0', '11', '6', '0' ], [ '+', '@emotion/react', '11.8.2', '11', '8', '2' ], [ '+', '@emotion/styled', '11.8.1', '11', '8', '1' ] ]; const changes = data.reduce((t, [type, name, , major, minor, patch], i, arr) => { if (type === "+") { const match = arr .find(([type, pName]) => type === "-" && pName === name); if (!match) { return t; // handle no match here } const [, , , pMajor, pMinor, pPatch] = match; return { ...t, [name]: pMajor !== major ? "major" : pMinor !== minor ? "minor" : "patch" } } return t; }, {}); console.log(changes);

about 4 years ago · Juan Pablo Isaza Denunciar

0

  • Crear un Map de todas las restas
  • Recorre todas las adiciones y redúcelas al objeto deseado usando el mapa.

 const data = [ ["-", "@date-io/moment", "1.3.13", "1", "3", "13"], ["+", "@date-io/moment", "1.3.14", "1", "3", "14"], ["-", "@emotion/react", "11.7.0", "11", "7", "0"], ["-", "@emotion/styled", "11.6.0", "11", "6", "0"], ["+", "@emotion/react", "11.8.2", "11", "8", "2"], ["+", "@emotion/styled", "11.8.1", "11", "8", "1"], ]; const subMap = new Map(data.filter((d) => d[0] === "-").map((d) => [d[1], d])); const additions = data.filter((d) => d[0] === "+"); const updates = additions.reduce((updates, addition) => { const pkgName = addition[1]; const [maj, min, patch] = addition.slice(-3); const [oldMaj, oldMin, oldPatch] = subMap.get(pkgName).slice(-3); if (maj === oldMaj && min === oldMin && patch >= oldPatch) { updates[pkgName] = "patch"; } else if (maj === oldMaj && min >= oldMin) { updates[pkgName] = "minor"; } else { updates[pkgName] = "major"; } return updates; }, {}); console.log(updates);

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