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

122
Vistas
Calcule el promedio de la matriz de objetos con filtrado para indefinido

Estoy tratando de calcular el promedio de valores con la misma clave en una matriz de objetos. No todos los Objetos consisten en los mismos valores que el otro, pero aún quiero que se devuelva el promedio dependiendo de cuántas veces aparezca en la matriz. por ejemplo yo quiero

 const Object1 = [{ 2005: 5.6, 2006: 5.2 }, { 2005: 5.6, 2006: 5.7, 2007: 5.4 }, { 2005: 5.6, 2006: 5.9, 2007: 5.8 }]

Regresar

 { 2005: 5.599999999999999, 2006: 5.6000000000000005, 2007: 5.6 }

Esto es lo que he intentado hasta ahora. Ahora mismo el problema es que no tengo forma de/lo por la cantidad de veces que aparece. Y si falta el año, el valor se vuelve indefinido y esto hace que el resultado sea NaN.

 const Object1 = [{ 2005: 5.6, 2006: 5.2 }, { 2005: 5.6, 2006: 5.7, 2007: 5.4 }, { 2005: 5.6, 2006: 5.9, 2007: 5.8 }] const years = Object.keys(Object.assign({}, ...Object1)); const Result = years.reduce((a, v) => ({ ...a, [v]: v }), {}) console.log(Result) years.map((year) => { const value = Object1.map(function(obj) { return obj[year] }).reduce(function(a, b) { return (a + b) }) / years.length Result[year] = value }) console.log(Result)
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

const years = Object1.reduce(( prev, curr ) => { for (const key in curr) prev[key] = (prev[key] || []).concat(curr[key]) return prev }, {}) const Result = {} for (const year in years) { Result[year] = years[year].reduce(( prev, val ) => prev + val, 0) / years[year].length } console.log(Result)

este código primero coloca todos los valores de cada año en una matriz en un objeto (eso es lo que hace la primera reducción) luego recorre cada año y agrega el promedio (suma de todos los valores dividida por la cantidad de valores) al objeto Result

about 4 years ago · Juan Pablo Isaza Denunciar

0

Hice algunos cambios basados en tu código.

 const Object1 = [{ 2005: 5.6, 2006: 5.2 }, { 2005: 5.6, 2006: 5.7, 2007: 5.4 }, { 2005: 5.6, 2006: 5.9, 2007: 5.8 }] const years = Object.keys(Object.assign({}, ...Object1)); const Result = years.reduce((a, v) => ({ ...a, [v]: v }), {}) console.log(Result) years.map((year) => { // Filter out keywords while removing undefined ones var filteredYear = Object1.map(function(obj) { return obj[year] }).filter(e=>e!=undefined) // Perform a reduce calculation with the filtered results const value = filteredYear.reduce(function(a, b) { return (a + b) }) / filteredYear.length Result[year] = value }) console.log(Result)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede agrupar puntos por año y calcular puntos únicamente en función de cada grupo

 const object1 = [ { 2005: 5.6, 2006: 5.2, }, { 2005: 5.6, 2006: 5.7, 2007: 5.4, }, { 2005: 5.6, 2006: 5.9, 2007: 5.8, }, ]; const groupPointByYears = object1.reduce((map, obj) => { for (const [year, point] of Object.entries(obj)) { if (!map.has(year)) { map.set(year, []); } map.get(year).push(point); } return map; }, new Map()); console.log(Array.from(groupPointByYears)); const res = Object.fromEntries( Array.from(groupPointByYears).map(([year, points]) => [ year, points.reduce((sum, point) => sum + point, 0) / points.length, ]) ); console.log(res);

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