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"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);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" ]