Tengo una matriz de fecha local llamada mainDateArray, solía llamar a llamadas APi para obtener alguna respuesta. De la respuesta obtengo dos matrices llamadas "Fechas" y "RecordCount". Estas fechas y el recuento de registros tienen la misma longitud y la matriz recordCount contiene valores respectivos a las "fechas" del servidor.

Más tarde, necesito dibujar un gráfico basado en estos dos "mainDateArray" y "recordCount" si los valores de la matriz de fechas no coinciden con mainDateArray, necesito agregar o insertar 0 en la matriz "recordsCount"

Para ser mas clara

mainDateArray = ["05-May-19","06-May-19","07-May-19","08-May-19","09-May-19","10-May-19","11-May-19"];
dates = ["06-May-19","08-May-19","10-May-19"]; // response date
recordsCount = [20,30,10];  // data for the above dates Array from response

Mi salida esperada

op = [0,20,0,30,0,10,0];
example:=> ["05-May-19"=0,"06-May-19"=20,"07-May-19"=0,"08-May-19"=30,"09-May-19"=0,"10-May-19"=10,"11-May-19"=10]

Es decir, cuando mi fecha de respuesta no incluye el maindateArray, necesito agregar 0 en los datos de recordCount, cualquier hepl sería útil para mí

0
batMan007 11 may. 2019 a las 07:46

4 respuestas

La mejor respuesta

Utilizando Array​​.map() y Array​​.indexOf()

var mainDateArray = ["05-May-19", "06-May-19", "07-May-19", "08-May-19", "09-May-19", "10-May-19", "11-May-19"]
var dates = ["06-May-19", "08-May-19", "10-May-19"]
var recordsCount = [20, 30, 10]

var result = mainDateArray.map((v, i) => recordsCount[dates.indexOf(v)] || 0)

console.log(result)
1
User863 11 may. 2019 a las 05:10
Please try this will work ..

  <script 
      src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"> 
     </script>
     <script>
     var mainDateArray = ["05-May-19","06-May-19","07-May-19","08-May-19","09-May- 
     19","10-May-19","11-May-19"];
     var output       = [];     
     var dates = ["06-May-19","08-May-19","10-May-19"]; // response date

    for(var i=0; i<mainDateArray.length; i++)
    {
     if($.inArray(mainDateArray[i],dates)!=-1)
    {
        output.push(mainDateArray[i]);
    }
    else
     {
        output.push("0");
     }
   }    
   alert(output.toString());
   </script>

Salida = [0,06-mayo-19,0,08-mayo-19,0,10-mayo-19,0]

0
Shameem Khan 11 may. 2019 a las 05:31

La forma más fácil de IMO es utilizar un objeto para realizar un seguimiento de los recuentos.

// create object for key (i.e. date) based lookup
var counts = {};
for(var i in mainDateArray){
    var date = mainDateArray[i];
    counts[date] = 0;
}

// update counts
for(var i in dates){
    var date = dates[i];
    counts[date] += recordsCount[i];
}

// output
var op = [];
for(var i in mainDateArray){
    var date = mainDateArray[i];
    op.push(counts[date]);
}
0
tickleweed 11 may. 2019 a las 05:06

Puedes probar esto

mainDateArray = [
  "05-May-19",
  "06-May-19",
  "07-May-19",
  "08-May-19",
  "09-May-19",
  "10-May-19",
  "11-May-19"
];
dates = ["06-May-19", "08-May-19", "10-May-19"]; // response date
recordsCount = [20, 30, 10];
op = [];
for (let i = 0; i < dates.length; i++) {
  for (let j = 0; j < mainDateArray.length; j++) {
    if (dates[i] === mainDateArray[j]) {
      op[j] = recordsCount[i];
    } else {
      if (!op[j]) op[j] = 0;
    }
  }
}
0
Maaz Syed Adeeb 11 may. 2019 a las 06:35