Le nœud Ramda + recherche l’object en fonction de la valeur

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)))