2015-03-25 117 views
8

我试图以功能性方式(使用Ramda)完成此操作。我的JSON的结构是这样的Ramda:如何根据嵌套数组中的值进行过滤

[ 
    {username: 'bob', age: 30, tags: ['work', 'boring']}, 
    {username: 'jim', age: 25, tags: ['home', 'fun']}, 
    {username: 'jane', age: 30, tags: ['vacation', 'fun']} 
] 

我试图根据'标签'属性中的值进行过滤,但没有成功。我能够过滤整数/字符串(年龄和用户名),但我无法弄清楚如何使用嵌套数组(标签)中的值。任何帮助将非常感激。

回答

15

有很多方法可以做到这一点。但我认为最干净的一个是:

R.filter(R.where({tags: R.contains('fun')})) 

你可以看到它在行动中Ramda REPL

其他选项,特别是如果该字段被更深地嵌套是compose(或pipeproppath呼叫与contains或可能采取的透镜的优点。

不过,我认为上面的答案是最具可读性的。

+0

对我来说这看起来不错。我喜欢它的读法:“过滤标签中包含”有趣“的地方”听起来很像问题描述。 – 2015-03-25 13:04:10

+0

非常感谢。自发布以来,我想出了这个var byTag = R.curry(function(tag,items)var containsTag = function(val){ return R.contains(tag,val.tags); }; return R .filter(containsTag,items); });'但绝对不像你的解决方案那么漂亮。无论出于何种原因使用R.contains作为财产价值甚至没有超过我的想法。再次感谢! – user3783301 2015-03-25 13:13:59

+0

我不知道具有类似'where'功能的其他库是否也允许在此处使用谓词。我们对这个功能非常满意。 – 2015-03-25 13:27:29

相关问题