【问题标题】:Lodash filter with custom condition具有自定义条件的 Lodash 过滤器
【发布时间】:2018-03-05 18:34:31
【问题描述】:

我有以下数组:

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

我需要按季度(1、2、3、4)过滤的所有月份,所以当我有第 1 季度时,需要一月、二月、三月的月份。

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

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

当然,我用变量替换 0 和 2,这只是示例。你能告诉我为什么这不起作用吗?它在没有过滤月份的情况下打印 lodash 包装器。我也尝试添加结束函数 *.values() 但效果不佳。

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

【问题讨论】:

    标签: javascript momentjs lodash


    【解决方案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());
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.core.min.js"&gt;&lt;/script&gt;

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-18
        • 2013-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多