Javascript 有没有更优雅的方法来解决这个Ramda过滤器问题?;
我需要过滤:Javascript 有没有更优雅的方法来解决这个Ramda过滤器问题?;,javascript,ramda.js,Javascript,Ramda.js,我需要过滤: 名称为“筛选器名称”的对象 属性“标记”等于每种类型中“过滤器名称”对象的对象 在本例中,结果是1、3、4、6 有更优雅的方法来解决这个问题吗?使用with获得所有项目的名称等于过滤器名称,并提取标签。然后使用,并列出您提取的标记,以获取具有相关标记的所有项目: const{pipe,filter,propEq,innerJoin,pluck}=R; 常量getFiltered=管道( 过滤器(propEq('name','filter name')), 拔(“标签”) ); c
过滤器名称,并提取标签。然后使用,并列出您提取的标记,以获取具有相关标记的所有项目:
const{pipe,filter,propEq,innerJoin,pluck}=R;
常量getFiltered=管道(
过滤器(propEq('name','filter name')),
拔(“标签”)
);
const getByTags=arr=>innerJoin(
(记录,标记)=>record.tag==tag,
啊,,
getFiltered(arr)
);
const arr=[{“id”:1,“name”:“filter name”,“type”:“type1”,“tag”:“tag1”},{“id”:3,“name”:“name3”,“type”:“type1”,“tag”:“tag1”},{“id”:4,“name”:“filter name”,“type”:“type2”,“tag”:“tag3”},{“id”:6,“name”:“name5”,“type”:“type2”,“tag 3”};
常量结果=getByTags(arr);
控制台日志(结果)代码>
下面是一系列的版本,展示了如何在一些自定义组合器的帮助下创建此函数的无点版本。但最后,我认为这根本不值得,另一个带有中间变量的版本——不管是否使用Ramda编写——更具可读性
第一关
很明显,解决这个问题有两个不同的步骤:第一,找到与过滤器名称匹配的标记,第二,找到具有这些标记名称的元素。让我们为这些函数编写函数:
const标记名=(filterName)=>(arr)=>
管道(过滤器(propEq('name',filterName)),拔管('tag'))(arr)
常量getItems=(propNames)=>(arr)=>过滤器(anyPass(map(propEq('tag'),propNames)))(arr)
常量匹配标记=(过滤器名称)=>(arr)=>
getItems(标记名(过滤器名称)(arr))(arr)
const arr=[{id:1,name:'filter name',type:'type1',tag:'tag1'},{id:2,name:'name2',type:'type1',tag2'},{id:3,name:'name3',type:'type1',tag tag:'tag1'},{id:4,type:'type2',tag4'},{id:6,name:'name5',type:'type2',tag3'}]
console.log(匹配标签('filter-name')(arr))
const{pipe,filter,propEq,pulk,anyPass,map}=R
Hi,是否有任何解决方案来获得结果的补码,我将record.tag==tag
更改为record.tag!==标记,但不起作用。谢谢!你的回答对我帮助很大,我以后会仔细考虑免积分方案!
var a = { id: 1, name: 'filter-name', type: 'type1', tag: 'tag1' };
var b = { id: 2, name: 'name2', type: 'type1', tag: 'tag2' };
var c = { id: 3, name: 'name3', type: 'type1', tag: 'tag1' };
var d = { id: 4, name: 'filter-name', type: 'type2', tag: 'tag3' };
var e = { id: 5, name: 'name4', type: 'type2', tag: 'tag4' };
var f = { id: 6, name: 'name5', type: 'type2', tag: 'tag3' };
var arr = [a, b, c, d, e, f];
var typeFind = R.curry((type, ex) => R.find(ele => ele.type === type, ex));
var tagEqProps = R.curry((o1, o2) => R.eqProps('tag', o1, o2));
var filtered = R.curry((arr, ex) => R.filter(ele => tagEqProps(ele, typeFind(ele.type, ex)), arr));
var excludes = R.filter(ele => ele.name === 'filter-name', arr);
filtered(arr, excludes);