Lodash过滤器具有自定义条件

时间:2018-03-05 18:34:31

标签: javascript momentjs lodash

我有以下数组:

  [{value: 0, label: 'January'}, ...
  {value: 11, label: 'December'}]

所有月份我需要按季度(1,2,3,4)过滤,所以当我有第1季需要月份1月,2月,3月。

是否可以在某个范围内过滤此数组? 我试过这个:

  console.log(_(months).filter(function(x) {
    return x.value >= 0 && x.value <= 2
  }));

当然我用变量替换0和2,这只是一个例子。你能告诉我为什么这不起作用吗?它打印lodash包装,没有过滤几个月。我也尝试添加结束函数* .values(),但也不起作用。

我也在我的项目时刻库中使用,所以如果存在简单的解决方案,那么它也可以。感谢

2 个答案:

答案 0 :(得分:1)

value()功能需要在filter而非console.log()

之后

months = [{
    value: 0,
    label: 'January'
  },
  {
    value: 11,
    label: 'December'
  }
];
console.log(months);
console.log(_(months).filter(function(x) {
  return x.value >= 0 && x.value <= 2
}).value());
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.core.min.js"></script>

答案 1 :(得分:1)

您的对象数组看起来过于复杂。您可以使用一个月份名称的简单数组(索引等于月份数):

var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
function get_Q(n) {
  return months.filter(function(m, i) {return i >= 3*(n-1) && i < 3*n})
}

console.log(get_Q(1)+'');
console.log(get_Q(2)+'');
console.log(get_Q(3)+'');
console.log(get_Q(4)+'');

如果无法简化阵列:

var months = [
{value:0, label:'Jan'},
{value:1, label:'Feb'},
{value:2, label:'Mar'},
{value:3, label:'Apr'},
{value:4, label:'May'},
{value:5, label:'Jun'},
{value:6, label:'Jul'},
{value:7, label:'Aug'},
{value:8, label:'Sep'},
{value:9, label:'Oct'},
{value:10, label:'Nov'},
{value:11, label:'Dec'}
];

function get_Q(n) {
  return months.filter(function(m) {
    return m.value >= 3 * (n - 1) && m.value < 3 * n
  })
}

console.log(get_Q(1));
console.log(get_Q(2));
console.log(get_Q(3));
console.log(get_Q(4));