Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.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 带gte条件的Ramda滤波器数据_Javascript_Conditional Statements_Filtering_Ramda.js - Fatal编程技术网

Javascript 带gte条件的Ramda滤波器数据

Javascript 带gte条件的Ramda滤波器数据,javascript,conditional-statements,filtering,ramda.js,Javascript,Conditional Statements,Filtering,Ramda.js,我有JSON和数据 { "date": "2019-12-17", "installs": 1, }, { "date": "2019-12-02", "installs": 5 }, { "date": "2019-12-02", "installs": 4 } .... 我需要在一个字段(例如安装)上按gte条件对其进行筛选 我尝试使用以下代码: let f = R.filter(R.propIs(true, R.gte(R.pro

我有JSON和数据

 {
   "date": "2019-12-17",
   "installs": 1,
 },
 {
   "date": "2019-12-02",
   "installs": 5
 },
 {
   "date": "2019-12-02",
   "installs": 4
 }
 ....
我需要在一个字段(例如安装)上按gte条件对其进行筛选

我尝试使用以下代码:

    let f = R.filter(R.propIs(true, R.gte(R.prop('installs'), 2)), data);
    console.log(f)
但是有错误

TypeError: Right-hand side of 'instanceof' is not an object

我认为你的尝试显示了你对如何使用拉姆达的功能组合思想的困惑。可能最接近您的工作版本如下所示:

filter(管道(道具('installs')、gte('uuuuuu2')、equals(true))、数据)
我将拉出并命名传递给
filter
的函数,以供讨论。如果没有其他用途,当然可以稍后再次内联

const enoughInstalls=pipe(prop('installs')、gte(uuuu,2),等于(true))
过滤器(数据)
请注意,当我们想要创建一个将数据从一个函数传递到另一个函数的函数时,我们不会将它们嵌套在类似
gte(prop('installs'),2)
的东西中。由于
prop('installs')
是一个函数,因此需要将函数作为第一个参数传递给
gte
。当然,您需要传递一个数字。当我们想要将一个函数调用的结果传递给另一个函数调用时,我们使用函数组合,通常使用Ramda或其。我们将在这里做后者,但是
compose
非常类似,只是参数颠倒了

因此,我们不使用
gte(prop('installs'),2)
而是使用
pipe(prop('installs')、gte('uuuuuu,2))
。这将返回一个函数,该函数将其参数传递给
prop('installs')
,并将该调用的结果传递给
gte(\uuuu2)
。上面管道中还有一个调用,
equals(true)
。这正试图符合你的
propIs
想法。但事实证明这是完全没有必要的<代码>gte将返回布尔值。因此,将
等于(true)
添加到该值只会返回相同的布尔值。因此,这可以简化为:

const enoughInstalls=管道(道具('installs'),gte('uuuuuu,2))
现在,这表示从输入对象获取属性
installs
,并将其传递给谓词函数
gte(uu,2)
。但是有一个内置的函数。我们可以将其改写为:

const enoughInstalls=propconfirates(gte(uuuuu,2),“installs”)
这是一个完全合理的解决方案。但实际上我更喜欢尼克·帕森斯在评论中建议的版本。对于这一个,我真的更喜欢在
filter
调用中内联:

constmyfilter=filter(其中({installs:gte(_u,2)})

将其大声读作“安装大于或等于2的过滤器”可以使其几乎像想象的那样可读。

我认为您的尝试显示了对如何使用Ramda的功能组合思想的一些困惑。可能最接近您的工作版本如下所示:

filter(管道(道具('installs')、gte('uuuuuu2')、equals(true))、数据)
我将拉出并命名传递给
过滤器的函数,以供讨论。如果没有其他用途,当然可以稍后再次内联

const enoughInstalls=pipe(prop('installs')、gte(uuuu,2),等于(true))
过滤器(数据)
请注意,当我们想要创建一个将数据从一个函数传递到另一个函数的函数时,我们不会用类似于
gte(prop('installs'),2)
的东西嵌套它们
是一个函数,这需要将一个函数作为第一个参数传递给
gte
。当然,您需要传递一个数字。当我们想将一个函数调用的结果传递给另一个函数调用时,我们使用函数组合,通常使用Ramda或其。我们将在这里执行后一种操作,但
compose
非常类似,只是把论点颠倒过来

因此,我们不使用
gte(prop('installs'),2)
而是使用
pipe(prop('installs'),gte('uuuuuuuuuuuuuuuuuu2))
。这将返回一个函数,该函数将其参数传递给
prop('installs')
,并将该调用的结果传递给
gte('uuuuuuuuuuuuuu2)
。在管道中还有一个调用,
equals(true)
。这试图匹配您的
propIs
想法。但结果是完全没有必要。
gte
将返回一个布尔值。因此,将
等于(true)
添加到该值只会返回相同的布尔值。因此可以简化为:

const enoughInstalls=管道(道具('installs'),gte('uuuuuu,2))
现在表示从输入对象获取属性
installs
,并将其传递给谓词函数
gte(uuu,2)
。但是有一个内置函数,我们可以将其重写为:

const enoughInstalls=propconfirates(gte(uuuuu,2),“installs”)
这是一个完全合理的解决方案。但实际上我更喜欢Nick Parsons在评论中建议的版本。对于这一版本,我更喜欢在
过滤器
调用中内联:

constmyfilter=filter(其中({installs:gte(_u,2)})

将其大声读作“filter where installs大于或等于2”可以使其几乎像想象的那样可读。

您可以使用
where
,如本回答所示。例如:
R.filter(R.where({'installs':gte(R.\uuuuuu3)}),数据)
@NickParsons我可以使用多种条件吗,比如gte 3 lt 10?也许可以尝试使用
过滤器(其中({'installs':和(gte({'uuuuu3),lt({'uuuuuuuu10)),数据);
是的,它正在工作,谢谢)你可以使用
where
,如本回答中所示:
R.filter(R.where({'installs':gte(R'uuuuu3)),数据)
@NickParsons我可以使用多个条件吗,比如gte 3 lt 10?也许可以尝试使用
过滤器(其中({'installs':和(gte(uuuu3),lt(uuuuuuu10))),数据);
是的,它正在工作,谢谢)