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

166
Vistas
Filtre y calcule las propiedades de los objetos de la misma tabla usando javascript

Espero que mi pregunta no se haga demasiado en SO.

Tengo una matriz de 3 objetos como:

 const objStart1 = { 'user': 1, 'score': 15, 'date': 'Monday' } const objStart2 = { 'user': 1, 'score': 7, 'date': 'Friday' } const objStart3 = { 'user': 2, 'score': 5, 'date': 'Monday' }

Me gustaría agrupar por fecha, luego calcular el promedio de la puntuación por día (y eliminar al usuario) y devolver una nueva matriz de objetos como:

 const objStart1 = { 'average': 10, 'date': 'Monday' } const objStart2 = { 'average': 7, 'date': 'Friday' }

Parece que podemos usar filter + reduce pero mis resultados son patéticos... ¿Hay una buena solución?

gracias de antemano.

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

0

Esto debería funcionar. Puse sus elementos en una matriz real y reemplacé Date con date .

 const input = [ { 'user': 1, 'score': 15, 'date': 'Monday' }, { 'user': 1, 'score': 7, 'date': 'Friday' }, { 'user': 2, 'score': 5, 'date': 'Monday' }, ] const sumList = input.reduce((acc, current) => { if(!acc.find(obj => obj.date === current.date)) acc.push({date: current.date, sum: 0, count: 0}) const currCounter = acc.find(obj => obj.date === current.date) currCounter.sum += current.score currCounter.count++ return acc }, []) .map(({date, sum, count}) => ({ date, average: sum/count })) console.log(sumList)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Otra forma de escribirlo.

 const arr=[ { 'user': 1, 'score': 15, 'date': 'Monday' }, { 'user': 1, 'score': 7, 'date': 'Friday' }, { 'user': 2, 'score': 5, 'date': 'Monday' } ] const result = arr.reduce((acc, curr, i)=>{ if(!acc.find((el)=>el.date==curr.date)){ acc.push({date: curr.date, score: curr.score, count: 1}) return acc } acc.map(el=>el.date===curr.date?(el.score+=curr.score,el.count+=1,el):el) return acc },[]) console.log(result.map((el)=>({average: el.score/el.count, date: el.date})))

about 4 years ago · Juan Pablo Isaza Denunciar

0

 const objStart1 = { 'user': 1, 'score': 15, 'date': 'Monday' } const objStart2 = { 'user': 1, 'score': 7, 'date': 'Friday' } const objStart3 = { 'user': 2, 'score': 5, 'date': 'Monday' } const objs = [objStart1, objStart2, objStart3]; let avgForDate = {}; avgForDate = objs.reduce((res, current) => { const oldInfo = res[current.date] ?? { count: 0, scoreSum: 0, }; const newInfo = { count: oldInfo.count + 1, scoreSum: oldInfo.scoreSum + current.score, }; res[current.date] = newInfo; return res; }, avgForDate); for(const info in avgForDate) { console.log({ date: info, avg: avgForDate[info].scoreSum / avgForDate[info].count, }); }

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