Javascript 带gte条件的Ramda滤波器数据
我有JSON和数据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
{
"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))),数据);
是的,它正在工作,谢谢)