2017-05-05 20 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])),[])