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

177
Vistas
Javascript Array = Agregar fechas faltantes

Tengo algunos datos de las ventas de nuestra tienda de bicicletas a lo largo del día y estamos enviando esos datos a través de un bucle para crear una matriz.

Nuestro código parece

 var sales_array = []; for (var i = 0; i < data_feed.length; i++) { var sales_values = Object.values(data_feed[i]); sales_values = sales_values[0].split(";"); var date = sales_values[0]; var sales = sales_values[10]; if(sales != '') { sales_array.push(date+','+sales); } }

Y esto funciona muy bien, con una salida que parece algo así

 "2022-02-07T16:20:00+00:00,20" "2022-02-08T09:18:00+00:00,4500" "2022-02-08T14:25:00+00:00,210" "2022-02-09T11:21:00+00:00,100"

El problema es que, si hay un par de días en que la tienda está cerrada y no hay ventas, terminamos con fechas faltantes en nuestra salida.

Por ejemplo, el 27 de febrero estábamos abiertos, pero el 28 y el 1 estábamos cerrados y el 2 volvimos a abrir, así que terminamos con

 "2022-02-27T16:45:00+00:00,3000" "2022-02-27T17:10:00+00:00,450" -----MISSING----- "2022-03-02T08:29:00+00:00,1000" "2022-03-02T15:54:00+00:00,550"

¿Cómo podemos cambiar nuestro código de bucle, de modo que incluso si falta una fecha, la agregará con un valor de venta de 0, por lo que lo anterior se vería así?

 "2022-02-27T16:45:00+00:00,3000" "2022-02-27T17:10:00+00:00,450" "2022-02-28T00:00:00+00:00,0" "2022-03-01T00:00:00+00:00,0" "2022-03-02T08:29:00+00:00,1000" "2022-03-02T15:54:00+00:00,550"
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

agrega estos codigos

 Date.prototype.addDays = function(noOfDays){ var tmpDate = new Date(this.valueOf()); tmpDate.setDate(tmpDate.getDate() + noOfDays); return tmpDate; } var sort = sales_array.map(e => e.split(',')[0]).sort((a, b) => a.localeCompare(b)) for (var i = new Date(sort[0]).addDays(1); i < new Date(sort[sort.length-1]); i = i.addDays(1)) { sales_array.push(i.toISOString().split('T')[0]+'T00:00:00+00:00,0'); } sales_array = sales_array.sort((a, b) => a.split(',')[0].localeCompare(b.split(',')[0])) 

 var data_feed = [ { a: '2022-02-27T17:10:00+00:00;0;0;0;0;0;0;0;0;0;450' }, { a: '2022-03-02T08:29:00+00:00;0;0;0;0;0;0;0;0;0;1000' } ] var sales_array = []; for (var i = 0; i < data_feed.length; i++) { var sales_values = Object.values(data_feed[i]); sales_values = sales_values[0].split(";"); var date = sales_values[0]; var sales = sales_values[10]; if(sales != '') { sales_array.push(date+','+sales); } } Date.prototype.addDays = function(noOfDays){ var tmpDate = new Date(this.valueOf()); tmpDate.setDate(tmpDate.getDate() + noOfDays); return tmpDate; } var sort = sales_array.map(e => e.split(',')[0]).sort((a, b) => a.localeCompare(b)) for (var i=new Date(sort[0]).addDays(1); i < new Date(sort[sort.length-1]); i=i.addDays(1)) { sales_array.push(i.toISOString().split('T')[0]+'T00:00:00+00:00,0'); } sales_array = sales_array.sort((a,b) => a.split(',')[0].localeCompare(b.split(',')[0])) console.log(sales_array);

about 4 years ago · Juan Pablo Isaza Denunciar

0

asumiendo la variable data_feed como

 var data_feed = [ {value: "2022-02-07T16:20:00+00:00;;;;;;;;;;20"}, {value: "2022-02-08T09:18:00+00:00;;;;;;;;;;4500"}, {value: "2022-02-10T14:25:00+00:00;;;;;;;;;;210"}, {value: "2022-02-13T11:21:00+00:00;;;;;;;;;;100"} ]

agregué algunos códigos dentro del tuyo

 var sales_array = []; var next_current_ymd; // store expected 'next ymd' for compare with in next index for (var i = 0; i < data_feed.length; i++) { var sales_values = Object.values(data_feed[i]); sales_values = sales_values[0].split(";"); var date = sales_values[0]; // me added - start var current_ymd = date.substring(0,10); // next_current_ymd <= 'missing date' you explained < current_ymd // loop 'missing date' sequentially until current date // skipped first time because 'next_current_ymd' is null for(;next_current_ymd < current_ymd;){ sales_array.push(next_current_ymd + 'T00:00:00+00:00,0'); // next_current_ymd + 1 var next_d = new Date(next_current_ymd); next_d.setUTCDate(next_d.getUTCDate() + 1); next_current_ymd = next_d.toISOString().substr(0,10); } // steor 'expected next ymd' var d = new Date(current_ymd); d.setUTCDate(d.getUTCDate() + 1); next_current_ymd = d.toISOString().substr(0,10); // me added - end var sales = sales_values[10]; if(sales != '') { sales_array.push(date+','+sales); } } console.log(sales_array);

resultados:

 [ "2022-02-07T16:20:00+00:00,20", "2022-02-08T09:18:00+00:00,4500", "2022-02-09T00:00:00+00:00,0", "2022-02-10T14:25:00+00:00,210", "2022-02-11T00:00:00+00:00,0", "2022-02-12T00:00:00+00:00,0", "2022-02-13T11:21:00+00:00,100" ]
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