Possible d’obtenir un object basé sur la valeur?
Dans l’exemple ci-dessous, le nom de la clé a un type . Par conséquent, la valeur du type doit extraire les résultats.
Par exemple, si type = ‘utilisateur’, n’extrayez le résultat que pour l’object utilisateurs et non pour l’object employé.
Ici, j’ai du mal à avoir les deux clés (utilisateurs et employé). Pourriez-vous s’il vous plaît suggérer une approche
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)
Sortie actuelle:
[[{"name": "user1"}, {"name": "user2"}, {"name": "user3"}], [{"emp": "user2"}], [{"name": "user1"}], [{"name": "emp1"}, {"name": "emp2"}, {"name": "emp3"}]]
Sortie attendue:
[[{"name": "user1"}, {"name": "user2"}, {"name": "user3"}], [{"name": "emp1"}, {"name": "emp2"}, {"name": "emp3"}]]
Vous pouvez utiliser R.cond
pour R.cond
une logique de twig basée sur un ensemble de prédicats, par exemple si le type
est user
ou employee
dans votre exemple.
Avec cette approche, vous devrez passer votre R.chain
à R.map
pour qu’elle corresponde à votre liste attendue, à moins que vous ne souhaitiez l’aplatissement supplémentaire des tableaux.
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)))