[英]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
分支邏輯,例如您的示例中type
是user
還是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.