2017-10-10 92 views
0

目前,我已经编写了下面的函数来过滤基于月份的项目并在Array中返回并且我在下面使用了登录。优化JS函数根据月份筛选数据

有人可以帮有什么办法,我可以使用datejs或力矩的js在2/Jan/17和过滤的格式更高效的方式使用循环

在这里我得到最新基于includes方法

过滤更容易

在此先感谢!

的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

你可以一个月的值存储在阵列和重复那些你的单身$过滤器内部功能,而不是如果条件多次 –

回答

1

您可以使用Underscore group bymomentjs

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

只是稍微纠正'var janData = data [“Jan”]?数据[“Jan”]。length:0;' – Batman

+0

@Batman ok bro然后需要将'format(“MM”)'改为'format(“MMM”)' – jitender