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]
。
你想用一個你想要的鑰匙取回一個物件嗎? –