过滤'或'在lodash简写表达

时间:2016-05-23 12:27:08

标签: javascript functional-programming underscore.js filtering lodash

假设我有一个集合:

var collection = [{type: 'a'}, {type: 'b'}, {type: 'c'}, {type: 'd'}]

我如何过滤它,以便只输入' a'和' b'会保持?我期望做类似的事情:

_filter(collection, ['type', 'a', 'b'])

即。使用_.matchesProperty iteratee简写来处理多种匹配类型,但它不起作用。在没有定义自定义函数的情况下,您知道实现此目的的任何简单方法吗?

3 个答案:

答案 0 :(得分:4)

您可以将_.filter与函数结合使用,使其更具功能性,但简单.filter也足够了:

<强> ES5:

collection.filter(function (i) {
  return i.type === 'a' || i.type === 'b';
});

<强> ES6

collection.filter(i => i.type === 'a' || i.type === 'b')

答案 1 :(得分:1)

很好,把ryeballar的建议写成答案:

假设我有:

var collection = [{type: 'a'}, {type: 'b'}, {type: 'c'}, {type: 'd'}]

以下将仅过滤掉'a'和'b'类型:

_.filter(collection, _.conforms({'type': _.partial(_.includes, ['a', 'b'])}))

不是最漂亮的代码,但我认为胜过ES5函数并显示_.conforms是如何工作的。正是我在寻找的东西!

答案 2 :(得分:1)

collection.filter(i => ['a', 'b'].includes(i.type));