【发布时间】:2016-05-23 12:27:08
【问题描述】:
假设我有一个收藏:
var collection = [{type: 'a'}, {type: 'b'}, {type: 'c'}, {type: 'd'}]
如何过滤它,以便只保留类型“a”和“b”?我希望这样做:
_filter(collection, ['type', 'a', 'b'])
即使用 _.matchesProperty iteratee 速记来处理多种匹配类型,但它不起作用。您是否知道任何简单的方法来实现这一点,而无需定义自定义函数?
【问题讨论】:
-
不创建自己的函数有什么重要的?
collection = _.filter(collection, function(e) { return e.type == 'a' || e.type == 'b' });完成。 ES2015 更好:collection = _.filter(collection, e => e.type == 'a' || e.type == 'b'); -
这不是一个拦截器,但我很惊讶它不被支持,并且做了一些研究没有发现任何东西,所以想确认这在 lodash 中实际上是不可能的。另外,我正在使用更实用的做事方式,所以我希望有人会想出一个有趣的使用 _property、_.partial 或类似的东西。但你说得完全正确,这可以通过自定义函数轻松完成,甚至在 ES6 中以优雅的方式完成。
-
可以考虑使用conforms(),其中
type属性使用includes,即binds['a', 'b']作为其第一个参数。 -
正是我正在寻找的,只是在您的建议中添加了答案。谢谢一百万!
-
@ryeballar:听起来这会是一个很好的答案。
标签: javascript functional-programming underscore.js filtering lodash