2017-05-05 26 views
0

對不起,關於複雜的標題,但我希望下面的描述更清楚。是否有像函數形式的函數形式的數組產生所有對的Javascript

我目前正在使用Ramda作爲我選擇的函數庫來學習Javascript中函數式編程的樂趣。我有一個數組,我想以類似於foreach的方式進行迭代。但是,我希望我的匿名函數能夠從原始數組中傳遞所有可能的對。所以實際上,形成一個矩陣,矩陣的每個軸將由矩陣的內容表示:

如果我有一個數組[a,b,c],那麼那裏總共有9對組合;如果我拿走與自身配對的每個元素(可以通過過濾器來實現),那麼只有6個。但是如果再次減少這個元素,通過不反過來對於反向配對進行回叫,只有3個。

所以,我的功能將被傳遞迴以下對:

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

是否有這個在Ramda或任何其他功能的庫函數形式可以做到這一點?它是通用功能,但我不知道這個功能的'名稱'是什麼;也許是forEachYieldUniquePair。在我自己實施之前,我想知道一種慣用的方式來做到這一點,謝謝。

+0

_re共有9對組合; _ - 它包括重複和順序,即'aa,ab,ba ...'? –

+2

爲什麼你需要一個庫函數呢? 'arr.reduce((acc,letter,index,all)=> acc.concat(all.slice(index + 1).map(x => [letter,x])),[])' –

+0

There are a很少的技術[這裏](https://codereview.stackexchange.com/questions/7001/generating-all-combinations-of-an-array) – James

回答

0

由於尤里該正確答案:

arr.reduce((ACC,字母,索引,所有)=> acc.concat(all.slice(索引+ 1).MAP(X => [字母,x])),[])