Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Ramda从对象中过滤出特定的键?_Javascript_Object_Functional Programming_Ramda.js - Fatal编程技术网

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}