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

145
Vistas
Filtrar/Reducir la matriz de objetos en un nuevo objeto basado en el día

Considere la siguiente matriz de objetos:

 const data = [ *{...more data from previous dates}*, { unixDate: 1650348034, //yesterday dateTime: Tue Apr 19 2022 23:00:34, severityLevel: 1, severity: "Light" }, { unixDate: 1650348034, //yesterday dateTime: Tue Apr 19 2022 14:00:34, severityLevel: 3, severity: "Moderate" }, { unixDate: 1650440700, //today dateTime: Wed Apr 20 2022 15:45:00, severityLevel: 2, severity: "Moderate-Light" }, { unixDate: 1650442500, //today dateTime: Wed Apr 20 2022 15:45:00, severityLevel: 4, severity: "Heavy" }, { unixDate: 1650427234, //today dateTime: Wed Apr 20 2022 12:00:00, severityLevel: 3, severity: "Moderate" } ]

Me gustaría devolver lo siguiente:

 { *///...records from previous dates,* 1650348034 : 2, //yesterday record taking only one of the unixtimestamp, and the average value of 'severityLevel'. 1650440700 : 3 //same as above but unixtimestamp is today. }

Estoy usando el paquete dayjs para determinar si la fecha es hoy o no, a través del complemento isToday , pero no pude pensar en cómo comparar las fechas. Los data crecen cada día a medida que registran nuevas lecturas. No estoy muy familiarizado con los métodos de filtro/reducción de matriz en ES6, ¿serían útiles aquí? ¡Cualquier ayuda es apreciada!

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

0

Otro enfoque con un método dayBegins que calculará la marca de tiempo de inicio del día. Esto será útil para identificar si las marcas de tiempo caen en el mismo día o no.

Junto con eso, solo cree un objeto de seguimiento con claves como dayBegin y valores con severityLevel y número de ocurrencias.

 const dayBegins = (uDate) => "" + uDate * 1000 - ((uDate * 1000) % (24 * 60 * 60 * 1000)); const process = (arr, output = {}) => { arr.forEach(({ unixDate, severityLevel }) => { const key = dayBegins(unixDate); if (key in output) { output[key].count += 1; output[key].sum += severityLevel; } else { output[key] = { unixDate, count: 1, sum: severityLevel, }; } }); return Object.values(output).reduce( (acc, { unixDate, sum, count }) => Object.assign(acc, { [unixDate]: sum / count }), {} ); }; const data = [ { unixDate: 1650348034, //yesterday dateTime: "Tue Apr 19 2022 23:00:34", severityLevel: 1, severity: "Light", }, { unixDate: 1650348034, //yesterday dateTime: "Tue Apr 19 2022 14:00:34", severityLevel: 3, severity: "Moderate", }, { unixDate: 1650440700, //today dateTime: "Wed Apr 20 2022 15:45:00", severityLevel: 2, severity: "Moderate-Light", }, { unixDate: 1650442500, //today dateTime: "Wed Apr 20 2022 15:45:00", severityLevel: 4, severity: "Heavy", }, { unixDate: 1650427234, //today dateTime: "Wed Apr 20 2022 12:00:00", severityLevel: 3, severity: "Moderate", }, ]; console.log(process(data))

about 4 years ago · Juan Pablo Isaza Denunciar

0

Primero debe convertir esos tiempos de Unix en objetos de Date de JavaScript. Luego puede agrupar por año/mes/fecha y luego promediar los resultados.

 const data = [ { unixDate: 1650348034, //yesterday dateTime: "Tue Apr 19 2022 23:00:34", severityLevel: 1, severity: "Light" }, { unixDate: 1650348034, //yesterday dateTime: "Tue Apr 19 2022 14:00:34", severityLevel: 3, severity: "Moderate" }, { unixDate: 1650440700, //today dateTime: "Wed Apr 20 2022 15:45:00", severityLevel: 2, severity: "Moderate-Light" }, { unixDate: 1650442500, //today dateTime: "Wed Apr 20 2022 15:45:00", severityLevel: 4, severity: "Heavy" }, { unixDate: 1650427234, //today dateTime: "Wed Apr 20 2022 12:00:00", severityLevel: 3, severity: "Moderate" } ] const x = Object.values(data.map(x => ({...x, dateTime: new Date(x.unixDate * 1000)})) .reduce( (acc,i) => { const key = "" + i.dateTime.getFullYear() + i.dateTime.getMonth() + i.dateTime.getDate(); acc[key] = acc[key] || []; acc[key].push(i); return acc },{})) .reduce( (obj,rec) => { return {...obj, [rec[0].unixDate]: rec.reduce( (acc,i) => acc+i.severityLevel,0) / rec.length } },{}) console.log(x)

Tenga en cuenta que si la propiedad dateTime ya es una fecha de JavaScript, puede prescindir de la data.map(x => ({...x, dateTime: new Date(x.unixDate * 1000)})) .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Obtiene una lista única de días y construye un objeto basado en los días calculados

 const data = [ { unixDate: 1650348034, dateTime: "Tue Apr 19 2022 23:00:34", severityLevel: 1, severity: "Light" }, { unixDate: 1650348034, dateTime: "Tue Apr 19 2022 14:00:34", severityLevel: 3, severity: "Moderate" }, { unixDate: 1650440700, dateTime: "Wed Apr 20 2022 15:45:00", severityLevel: 2, severity: "Moderate-Light" }, { unixDate: 1650442500, dateTime: "Wed Apr 20 2022 15:45:00", severityLevel: 4, severity: "Heavy" }, { unixDate: 1650427234, dateTime: "Wed Apr 20 2022 12:00:00", severityLevel: 3, severity: "Moderate" } ] //Get unique list of days let unique = [... new Set(data.map(d => new Date(d.unixDate * 1000).toLocaleDateString("en-US")))]; //build object based on this list let results = Object.fromEntries(unique.map(m => { let records = data.filter(v => new Date(v.unixDate * 1000).toLocaleDateString("en-US") === m); return [records[0].unixDate, records.reduce((v,o) => v+=o.severityLevel, 0) / records.length ] })); console.log(results);

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