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

139
Vistas
calcule el promedio del primer elemento en una matriz bidimensional

Tengo esta matriz bidimensional

 var data = [ ['12-9', 134], ['12-9', 148], ['12-9', 92], ['1-8', 116], ['1-8', 136], ['1-8', 150], ['21-5', 138], ['21-5', 143], ['21-5', 119], ['21-5', 125] ]

y yo si el primer valor de un elemento coincide con el de los otros quiero calcular el promedio del segundo.

por ejemplo: los primeros 3 elementos tienen todos "12-9" y para eso debería darme 124,7 porque (137+148+92) / 3 = 124,7.

Esto podría ser muy fácil, pero estoy atascado. Lo probé con map() y reduce() o filter() pero nada me funciona. Estoy muy seguro de que no veo las cosas obvias aquí.

Y ahora descargué todo de nuevo y este es mi nuevo punto de partida ahora:

 for (let item of data) { var temp = item[0]; var myValues = data.filter((value) => { return value[0] === temp; }); console.log(myValues ); }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Filtrar y reducir es lo que necesitas

 const data = [['12-9', 134],['12-9', 148],['12-9', 92],['1-8', 116],['1-8', 136],['1-8', 150],['21-5', 138],['21-5', 143],['21-5', 119],['21-5', 125]]; const avg = data.reduce((acc, item) => { const key = item[0] if (!acc[key]) { const same = data .filter(nums => nums[0] === key); acc[key] = { count: same.length, avg: +(same.reduce((acc, [key, num]) => acc + num, 0) / same.length).toFixed(2) // key is ignored we could use an underscore to show that } } return acc }, {}) console.log(avg)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Aquí hay un ejemplo que se reduce a un mapa agrupado por el primer elemento y luego itera sobre el resultado para promediar las matrices agrupadas y reconstruir la forma de la matriz original.

 const data = [['12-9', 134], ['12-9', 148], ['12-9', 92], ['1-8', 116], ['1-8', 136], ['1-8', 150], ['21-5', 138], ['21-5', 143], ['21-5', 119], ['21-5', 125],]; const map = data.reduce((a, [k, v]) => a.set(k, [...(a.get(k) ?? []), v]), new Map()); const result = [...map.entries()].map(([k, vs]) => [k, vs.reduce((a, b) => a + b) / vs.length]); console.log(result);

O una lógica similar aplicada en bucles for...of sucesivos, pero esta vez rastreando una suma y un recuento continuos de cada elemento, evitando así la reducción posterior para calcular el promedio.

 const data = [['12-9', 134], ['12-9', 148], ['12-9', 92], ['1-8', 116], ['1-8', 136], ['1-8', 150], ['21-5', 138], ['21-5', 143], ['21-5', 119], ['21-5', 125],]; const map = new Map(); for (const [key, value] of data) { if (!map.has(key)) { map.set(key, { sum: 0, count: 0 }); } map.get(key).count += 1; map.get(key).sum += value; } const result = []; for (const [key, { sum, count }] of map) { result.push([key, sum / count]); } console.log(result);

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