2017-05-05 1 views
0

Désolé pour le titre compliqué, mais j'espère que la description suivante rend cela plus clair. Je suis en train d'apprendre les joies de la programmation fonctionnelle en Javascript, en utilisant Ramda comme ma bibliothèque fonctionnelle de choix. J'ai un tableau que je voudrais parcourir de la même manière que foreach. Cependant, je voudrais que ma fonction anonyme passe toutes les paires possibles du tableau original. Donc, en effet, une matrice est formée où par chaque axe de la matrice à représenter par le contenu du tableau:Y at-il une forme fonctionnelle d'une fonction comme foreach sur un tableau qui donne toutes les paires en Javascript

si j'ai un tableau avec ["a", "b", "c"] alors là sont au total 9 combinaisons de paires; si j'enlève chaque élément associé à lui-même (ce qui pourrait être implémenté par un filtre, je suppose), il n'y en a que 6. Mais si on réduit encore, en ne recollant pas les paires inverses, il n'y en a que 3.

donc ma fonction serait repassée les paires suivantes:

"a", "b" 
    "a", "c" 
    "b", "c" 

est-il une forme fonctionnelle de ce dans quoi que ce soit ou autre Ramda bibliothèque fonctionnelle qui peut le faire? C'est une fonctionnalité générique, mais je ne sais pas quel serait le 'nom' de cette fonctionnalité; peut-être pourEyeYieldUniquePair. Je voudrais savoir d'une façon idiomatique de le faire avant de l'implémenter moi-même, merci.

+0

_re fait au total 9 combinaisons de paires; _ - inclut les répétitions et l'ordre, c.-à-d. 'aa, ab, ba ...'? –

+2

Pourquoi auriez-vous besoin d'une fonction de bibliothèque pour cela? 'arr.reduce ((acc, lettre, index, tout) => acc.concat (all.slice (index + 1) .map (x => [lettre, x])), [])' –

+0

Il y a un quelques techniques [ici] (https://codereview.stackexchange.com/questions/7001/generating-all-combinations-of-an-array) – James

Répondre

0

Merci à Yury pour cette bonne réponse:

arr.reduce ((acc, lettre, index, tous) => acc.concat (all.slice (index + 1) .map (x => [ lettre, x])), [])