Jared Smith的回答非常好。我只是想补充说明为什么你的代码不工作。你试过
R.filter(R.props('a'), {a: 1, b: 2, c: 3, d: 4});
首先,你指着文档prop
,但使用props
。这些是不同但相关的功能。 prop
看起来像
// prop :: k -> {k: v} -> v
prop('c', {a: 1, b: 2, c: 3, d: 4}); //=> 3
(有关于undefined
一些额外的复杂性。)
props
,另一方面需要多个值
// props :: [k] -> {k: v} -> [v]
props(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> [1, 4]
但是这些都将是有益的投入filter
,对于这些目的我们可以认为是
// filter :: (k -> Bool) -> {k: v} -> {k: v}
filter
的第一个参数是从(字符串)键到布尔值的函数;它适用于Javascript的想法,即除了一些特定的值之外,一切都是真实的。它将依次用每个键调用。例如,在决定是否包含{c: 3}
时,它调用props('a')('c')
,这是另一个有点奇怪的原因*,实际上工作,返回[3]
,这被视为真y,并且过滤器函数将在其输出中包括{c: 3}
。所以每个关键都会包含在内。
*原因props('a', obj)
作品,当它真的应该props(['a'], obj)
的是,在JS,串足够接近名单,有length
属性和索引值。 'a'.length; ==> 1
,'a'[0]; //=> 'a'
。因此props
可以将单字符字符串视为它们是字符串的一元列表。但它也可能有点奇怪:R.props('cabby', {a: 1, b: 2, c: 3, d: 4}); //=> [3, 1, 2, 2, undefined]
。
你想用一个你想要的钥匙取回一个物件吗? –