【问题标题】:Underscore dynamic chaining下划线动态链接
【发布时间】:2016-11-24 13:47:07
【问题描述】:

如果我有一个函数数组必须是 _.filter 方法的闭包,我该如何动态地制作这个过滤器?

_filters : {
    shipped: function(order){ return order.get('is_shipped') },
    imported: function(order){ return order.get('is_imported') }
},

我想要的是能够像这样动态创建链

_.chain(orders).filter(filters.shipped).filter(filters.imported).value()

来自 _filters 对象中的闭包

也许有人知道如何在下划线中创建动态链接?

谢谢!

【问题讨论】:

    标签: javascript arrays underscore.js filtering chaining


    【解决方案1】:

    如果我正确理解您想要什么,您希望有一个动态数量的过滤器,应该应用于数组,如果是这样,您可以使用 _.values() 从对象中提取过滤器,然后使用迭代它们_.every()。如果所有过滤器都返回true,则顺序将在结果数组中:

    var filters = {
      shipped: function(order) {
        return order.get('is_shipped')
      },
      imported: function(order) {
        return order.get('is_imported')
      }
    };
    
    var filtersArray = _.values(filters);
    
    var result = _.filter(orders, function(order) {
      return _.every(filters, function(filter) {
        return filter(order);
      });
    });
    

    你也可以不带下划线进行过滤:

    var filters = {
      shipped: function(order) {
        return order.get('is_shipped')
      },
      imported: function(order) {
        return order.get('is_imported')
      }
    };
    
    var filterKeys = Object.keys(filters);
    
    var result = orders.filter(function(order) {
      return filterKeys.every(function(key) {
        return filter[key](order);
      });
    });
    

    【讨论】:

    • 谢谢!!这正是我一直在寻找的 :)
    猜你喜欢
    • 2016-04-30
    • 2013-05-09
    • 2015-07-17
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2013-11-01
    • 1970-01-01
    相关资源
    最近更新 更多