Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

102
Views
Reestructuración del conteo basada en mes/semana/año

Tengo una matriz como esta (recuento y fecha)

 day = [ { count: 1, date: '2022-07-07' }, { count: 1, date: '2022-08-14' }, { count: 2, date: '2022-07-19' }, { count: 4, date: '2022-07-19' }, { count: 2, date: '2021-01-19' }, { count: 2, date: '2021-03-02' } ]

ahora estoy buscando una nueva matriz, debe ser una base de recuento total semana/mes/año

Estoy esperando como esto a continuación

 month = [ { count: 7, date: '2022-07-01' }, { count: 1, date: '2022-08-01' }, { count: 2, date: '2021-01-01' }, { count: 2, date: '2021-03-01' } ] year = [ { count: 9, date: '2022-01-01' }, { count: 4, date: '2021-01-01' }, ]

Igual que las bases semanales también

Estoy tratando de lograr algo como esto

 let month; for( d of day ) { if(condition) { // calculation for count adding month.push(d) } }
about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Se actualizó la respuesta según las sugerencias de RobG .

No implementé la parte groupByWeek(), pero la implementación de esta parte debería ser similar a la función groupByMonth() y groupByYear() en el código siguiente.

Para la parte groupByWeek, la parte complicada es cómo obtener el número de semana de la fecha, creo que la función getWeek() de los códigos compartidos de cmgchess en la sección de comentarios anterior sería útil, o puede usar una biblioteca de fechas para obtener la semana número.

 let day = [ { count: 1, date: "2022-07-07" }, { count: 1, date: "2022-08-14" }, { count: 2, date: "2022-07-19" }, { count: 4, date: "2022-07-19" }, { count: 2, date: "2021-01-19" }, { count: 2, date: "2021-03-02" }, { count: 5, date: "2021-07-19" }, ]; // create a map of {$year-$month-01: $count} based on the data in day array let groupByMonth = day.reduce((partialCount, item) => { let dateSplit = item.date.split("-"); let y = dateSplit[0]; let m = dateSplit[1]; if (Object.prototype.hasOwnProperty.call(partialCount, `${y}-${m}-01`)) { partialCount[`${y}-${m}-01`] += item.count; } else { partialCount[`${y}-${m}-01`] = item.count; } return partialCount; }, {}); // convert the groupByMonth map into an array of object(your expected format) let monthList = Object.keys(groupByMonth).map(key => { return { count: groupByMonth[key], date: key }; }); // create a map of {$year-01-01: $count} based on the data in day array let groupByYear = day.reduce((partialCount, item) => { let dateSplit = item.date.split("-"); let y = dateSplit[0]; if (Object.prototype.hasOwnProperty.call(partialCount, `${y}-01-01`)) { partialCount[`${y}-01-01`] += item.count; } else { partialCount[`${y}-01-01`] = item.count; } return partialCount; }, {}); // convert the groupByMonth map into an array of object(your expected format) let yearList = Object.keys(groupByYear).map(key => { return { count: groupByYear[key], date: key }; }); console.log("month:", monthList); console.log("year:", yearList);

about 4 years ago · Santiago Trujillo Report

0

Implementé una solución que devuelve un object con:

 key => value = month / year => totalCount

Espero que la salida esté bien para ti, me parece más lógico que usar solo una date del month / year para nombrarlo. Por cierto, puedo cambiar el formato de salida si es un problema para ti;)

Aquí está el código:

 const toArray = obj => Object.keys(obj).map(k => [k, obj[k]]); // transform an object to array of array [[key], [value]]; const sum = arr => arr.reduce((ps, a) => ps + a, 0); // sum an array let day = [ { count: 1, date: '2022-07-07' }, { count: 1, date: '2022-08-14' }, { count: 2, date: '2022-07-19' }, { count: 4, date: '2022-07-19' }, { count: 2, date: '2021-01-19' }, { count: 2, date: '2021-03-02' } ]; let years = Object.fromEntries( // transform the result to an object toArray( // transform the object to array day.reduce((acc, x) => { // sort the day by month / year // key (month or year) doesn't exist => create the key => append the element (acc[x.date.split('-').at(0)] = acc[x.date.split('-').at(0)] || []).push(x.count); return acc; }, {}) ).map(arr => [arr.at(0), sum(arr.at(1))]) // sum the counts ); let months = Object.fromEntries(toArray(day.reduce((acc, x) => { (acc[x.date.split('-').at(1)] = acc[x.date.split('-').at(1)] || []).push(x.count); return acc; }, {})).map(arr => [arr.at(0), sum(arr.at(1))])); console.log(months); console.log(years);

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!