Javascript 如何使用Ramda从对象中过滤出特定的键?
现在,上面的代码正在返回整个对象:Javascript 如何使用Ramda从对象中过滤出特定的键?,javascript,object,functional-programming,ramda.js,Javascript,Object,Functional Programming,Ramda.js,现在,上面的代码正在返回整个对象: newObject {“a”:1,“b”:2,“c”:3,“d”:4} 我想做的是只使用'a'键返回一个新对象。或者使用a和b键创建新对象。使用: 如果您的筛选条件比仅仅存在更复杂,您可以使用任意谓词函数进行选择。Jared Smith的回答非常好。我只是想补充一点,说明为什么您的代码不起作用。你试过了 R.filter(R.props('a'), {a: 1, b: 2, c: 3, d: 4}); 首先,您指向了的文档,但是使用了。这些是不同但相关的功能
newObject
{“a”:1,“b”:2,“c”:3,“d”:4}
我想做的是只使用'a'
键返回一个新对象。或者使用a
和b
键创建新对象。使用:
如果您的筛选条件比仅仅存在更复杂,您可以使用任意谓词函数进行选择。Jared Smith的回答非常好。我只是想补充一点,说明为什么您的代码不起作用。你试过了
R.filter(R.props('a'), {a: 1, b: 2, c: 3, d: 4});
首先,您指向了的文档,但是使用了。这些是不同但相关的功能<代码>道具看起来像
// prop :: k -> {k: v} -> v
prop('c', {a: 1, b: 2, c: 3, d: 4}); //=> 3
(关于未定义
,增加了一些复杂性)
另一方面,props
接受多个值
// props :: [k] -> {k: v} -> [v]
props(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> [1, 4]
但这两个都不是有用的输入到过滤器
,出于这些目的,我们可以将其视为
// filter :: (k -> Bool) -> {k: v} -> {k: v}
filter
的第一个参数是从(字符串)键到布尔值的函数;它与Javascript的理念相结合,即除了一些特定的值之外,一切都是真实的。它将使用每个键依次调用。因此,例如,当决定是否包含{c:3}
时,它调用props('a')('c')
,由于另一个稍微奇怪的原因*,它实际工作,返回[3]
,它被视为truth-y,并且过滤器函数将在其输出中包含{c:3}
。因此,每把钥匙也将包括在内
*
props('a',obj)
在它真正应该是props(['a',obj)
时起作用的原因是,在JS中,字符串与列表足够接近,具有length
属性和索引值<代码>'a'。长度;==>1,'a'[0];//=>'a'
。因此,props
可以将单个字符串视为字符串的一个元素列表。但它也可能有点奇怪:R.props('cabby',{a:1,b:2,c:3,d:4});//=>[3,1,2,2,未定义]
您想要返回一个只包含所需密钥的对象吗?
// props :: [k] -> {k: v} -> [v]
props(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> [1, 4]
// filter :: (k -> Bool) -> {k: v} -> {k: v}