簡體   English   中英

節點Ramda +根據值查找對象

[英]Node Ramda + find the object based on value

可能根據值獲取對象?

在下面的示例json中,鍵名具有type ,因此基於類型的值需要獲取結果。

例如,如果type ='user',則僅針對用戶對象而不是員工對象獲取結果。

在這里,我很努力地同時擁有密鑰(用戶和雇員),請您提出如何解決的建議。

 var list =[ {"doc":{"type":"user","Title":"test1","Relations":{"users":[{"name": "user1"},{"name": "user2"},{"name": "user3"}],"employee":[{"emp": "user2"}]}}}, {"doc":{"type":"employee","Title":"test2","Relations":{"users":[{"name": "user1"}],"employee":[{"name": "emp1"},{"name": "emp2"},{"name": "emp3"}]}}} ]; const getDetails = R.chain(R.pipe( R.path(['doc', 'Relations']), R.pick(['users', 'employee']), R.values )) const result = getDetails(list) console.log(result) 
 <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script> 

電流輸出:

[[{"name": "user1"}, {"name": "user2"}, {"name": "user3"}], [{"emp": "user2"}], [{"name": "user1"}], [{"name": "emp1"}, {"name": "emp2"}, {"name": "emp3"}]]

預期輸出:

[[{"name": "user1"}, {"name": "user2"}, {"name": "user3"}], [{"name": "emp1"}, {"name": "emp2"}, {"name": "emp3"}]]

您可以基於一組謂詞使用R.cond分支邏輯,例如您的示例中typeuser還是employee

使用這種方法,您將需要將R.chain切換到R.map以匹配您的期望列表,除非您想要額外扁平化數組。

 const list = [ {"doc":{"type":"user","Title":"test1","Relations":{"users":[{"name": "user1"},{"name": "user2"},{"name": "user3"}],"employee":[{"emp": "user2"}]}}}, {"doc":{"type":"employee","Title":"test2","Relations":{"users":[{"name": "user1"}],"employee":[{"name": "emp1"},{"name": "emp2"},{"name": "emp3"}]}}} ] const getDetails = R.map(R.pipe( R.prop('doc'), R.cond([ [R.propEq('type', 'user'), R.path(['Relations', 'users'])], [R.propEq('type', 'employee'), R.path(['Relations', 'employee'])] ]) )) const expected = [[{"name": "user1"}, {"name": "user2"}, {"name": "user3"}], [{"name": "emp1"}, {"name": "emp2"}, {"name": "emp3"}]] console.log(R.equals(expected, getDetails(list))) 
 <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM