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

101
Views
Reduzca la matriz de matrices, concatene los datos por fechas con los datos de la semana y sume los valores

Así que tengo un conjunto peculiar de datos:

 data: [ ['2022-01-17T16:29:24', 30], // these below would aggregate to 210 ['2022-01-17T17:37:24', 30], ['2022-01-17T17:41:40', 30], ['2022-01-17T17:41:48', 30], ['2022-01-21T12:50:18', 30], ['2022-01-21T12:50:18', 30], ['2022-01-21T12:50:29', 30], ['2022-01-12T12:50:18', 30], // these below would aggregate to 90 ['2022-01-12T12:50:18', 30], ['2022-01-12T12:50:29', 30] ]

Tendría que reducir esto a conjuntos de datos semanales. Convertiría las fechas al comienzo de la semana para obtener el moment(day).startOf('isoWeek') y luego combinaría los datos en fechas similares y los reduciría a una sola entrada.

El resultado final se vería así:

 data: [ ['2022-01-17T00:00:00', 210], ['2022-01-10T00:00:00', 90] ]

Pero estoy buscando sugerencias sobre cómo usar .reduce() o cualquier otra solución más moderna para esto que sería eficaz en conjuntos grandes. En este momento he anidado bucles para esto que (aparte de verse mal) probablemente funcionen bastante mal porque itera varias veces sobre la misma matriz. Un requisito es que el moment debe usarse para la manipulación de la fecha, intente evitar los objetos de Date .

Ahora mismo tengo algo como esto:

 mergeDataToWeek(data: any[]) { let reducedArrays = []; for (let arr of data) { if (moment(arr[0]).isValid() && arr[1] > 0) { arr[0] = moment(arr[0]).startOf('isoWeek').toISOString(true); if (!reducedArrays.some(reduced => reduced[0] == (arr[0]))) { reducedArrays.push(arr); } else { let target = reducedArrays.find(reduced => reduced[0] == arr[0]); target[1] += arr[1]; } } } console.log(reducedArrays); return reducedArrays; }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Estoy tratando de resolverlo usando reducir, pero el resultado será un objeto. Como esto:

 const moment = require("moment") var x = [ ['2022-01-17T16:29:24', 30], ['2022-01-17T17:37:24', 30], ['2022-01-17T17:41:40', 30], ['2022-01-17T17:41:48', 30], ['2022-01-21T12:50:18', 30], ['2022-01-21T12:50:18', 30], ['2022-01-21T12:50:29', 30], ['2022-01-12T12:50:18', 30], ['2022-01-12T12:50:18', 30], ['2022-01-12T12:50:29', 30] ] // solution var y = x.reduce((a,b) => { const key = moment(b[0]).startOf("isoWeek").format() a[key] = a[key]? a[key]+b[1]: b[1] return a }, {}) console.log(y)

Producción:

 { "2022-01-17T00:00:00+07:00": 210, "2022-01-10T00:00:00+07:00": 90 }

Pero si lo quiere como una matriz como la suya, podemos convertirlo de la siguiente manera:

 var z = Object.keys(y).map(i => [i,y[i]]) // OR THIS -- Thanks to @ghybs var z = Object.entries(y) console.log(z)

Producción:

 [ [ '2022-01-17T00:00:00+07:00', 210 ], [ '2022-01-10T00:00:00+07:00', 90 ] ]

Aunque no es la mejor solución, creo que será mucho más legible que el bucle anidado.

about 4 years ago · Juan Pablo Isaza Report

0


Ejecutar el código

 let x = [ ['2022-01-17T16:29:24', 30], ['2022-01-17T17:37:24', 30], ['2022-01-17T17:41:40', 30], ['2022-01-17T17:41:48', 30], ['2022-01-21T12:50:18', 30], ['2022-01-21T12:50:18', 30], ['2022-01-21T12:50:29', 30], ['2022-01-12T12:50:18', 30], ['2022-01-12T12:50:18', 30], ['2022-01-12T12:50:29', 30] ] // solution const groupedTotal = x.reduce((a, b) => { const key = moment(b[0]).startOf("isoWeek").format() a[key] = a[key] ? a[key] + b[1] : b[1] return a }, {}); const totals = Object.entries(groupedTotal); console.log("Grouped Total:", groupedTotal, "\n Totals:", totals);
 <script src="https://unpkg.com/moment@2.29.1/moment.js"></script>

Nota : - Código de @Rizal Ardhi Rahmadani...

about 4 years ago · Juan Pablo Isaza 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!