2017-10-10 3 views
0

Actuellement, j'ai écrit ci-dessous la fonction pour filtrer les éléments en fonction du mois et retourner dans Array et j'ai utilisé ci-dessous login.Optimiser la fonction JS pour filtrer les données basées sur Mois

Quelqu'un peut-il aider est-il possible que je puisse filtrer encore plus facilement en utilisant datejs ou moment de Js en utilisant pour la boucle de manière plus efficace

Ici, je reçois la date dans le format de 2/Jan/17 et le filtrage basé sur includes méthode

Merci d'avance!

Javascript

function getMonthlyCount() { 
    return yearlyExecution() 
     .then(function(myitems) { 
     monthlyDataForGraph = []; 
     var janFinalCount = febFinalCount = marFinalCount = aprFinalCount = mayFinalCount = junFinalCount = julFinalCount = augFinalCount = sepFinalCount = octFinalCount = novFinalCount = decFinalCount = 0; 
     myitems.forEach(function(items) { 
      releasename = items[0].cycleName; 
      janData = $filter('filter')(items, function(inputs) { 
      if (inputs.executedOn.includes("Jan/17")) 
       return inputs; 
      }); 
      febData = $filter('filter')(items, function(inputs) { 
      if (inputs.executedOn.includes("Feb/17")) 
       return inputs; 
      }); 
      marData = $filter('filter')(items, function(inputs) { 
      if (inputs.executedOn.includes("Mar/17")) 
       return inputs; 
      }); 
      aprData = $filter('filter')(items, function(inputs) { 
      if (inputs.executedOn.includes("Apr/17")) 
       return inputs; 
      }); 
      mayData = $filter('filter')(items, function(inputs) { 
      if (inputs.executedOn.includes("May/17")) 
       return inputs; 
      }); 
      junData = $filter('filter')(items, function(inputs) { 
      if (inputs.executedOn.includes("Jun/17")) 
       return inputs; 
      }); 
      julData = $filter('filter')(items, function(inputs) { 
      if (inputs.executedOn.includes("Jul/17")) 
       return inputs; 
      }); 
      augData = $filter('filter')(items, function(inputs) { 
      if (inputs.executedOn.includes("Aug/17")) 
       return inputs; 
      }); 
      sepData = $filter('filter')(items, function(inputs) { 
      if (inputs.executedOn.includes("Sep/17")) 
       return inputs; 
      }); 
      octData = $filter('filter')(items, function(inputs) { 
      if (inputs.executedOn.includes("Oct/17")) 
       return inputs; 
      }); 
      novData = $filter('filter')(items, function(inputs) { 
      if (inputs.executedOn.includes("Nov/17")) 
       return inputs; 
      }); 
      decData = $filter('filter')(items, function(inputs) { 
      if (inputs.executedOn.includes("Dec/17")) 
       return inputs; 
      }); 
      janFinalCount = janFinalCount + janData.length; 
      febFinalCount = febFinalCount + febData.length; 
      marFinalCount = marFinalCount + marData.length; 
      aprFinalCount = aprFinalCount + aprData.length; 
      mayFinalCount = mayFinalCount + mayData.length; 
      junFinalCount = junFinalCount + junData.length; 
      julFinalCount = julFinalCount + julData.length; 
      augFinalCount = augFinalCount + augData.length; 
      sepFinalCount = sepFinalCount + sepData.length; 
      octFinalCount = octFinalCount + octData.length; 
      novFinalCount = novFinalCount + novData.length; 
      decFinalCount = decFinalCount + decData.length; 
     }); 
     monthlyDataForGraph = [janFinalCount, febFinalCount, marFinalCount, aprFinalCount, mayFinalCount, junFinalCount, julFinalCount, augFinalCount, sepFinalCount, octFinalCount, novFinalCount, decFinalCount]; 
     console.log('Monthly Data For Graph', monthlyDataForGraph); 
     return monthlyDataForGraph; 
     }); 
    } 
+0

Vous pouvez stocker les valeurs de mois dans le tableau et itérer ceux à l'intérieur de votre filtre unique $ fonction au lieu de si condition plusieurs fois –

Répondre

1

Vous pouvez utiliser Underscore group by avec momentjs quelque chose comme

var data= _.groupBy(arr,function(item){return moment(inputs.executedOn,"DD/MMM/YY").format("MMM")}) 



var janData=data["Jan"] ? data["Jan"].length : 0; 

Here is working demo

+0

Juste une légère correction 'var janData = data [" Jan "]? data ["Jan"]. length: 0; ' – Batman

+0

@Batman ok alors besoin de changer' format ("MM") 'en' format ("MMM") ' – jitender