Ramda 中的分组叉积

Grouped cross-product in Ramda

我想做 FP 等效的(伪代码):

var l1 = [ '1', '2', '3' ];
var l2 = [ 'a', 'b', 'c' ];

var table = []
for i in l1 {
   var row = [];
   for j in l2 {
      row.push([i, j]);
   }
   table.push(row);
}

导致table ==

[
   [["1", "a"], ["1", "b"], ["1", "c"]], 
   [["2", "a"], ["2", "b"], ["2", "c"]], 
   [["3", "a"], ["3", "b"], ["3", "c"]]
]

我是通过以下方式实现的:

const headEquals = (x,y) => R.equals(R.head(x), R.head(y));

const transform = R.compose(
   R.groupWith(headEquals),
   R.xprod
);

const table = transform(l1,l2);

...但感觉并不优雅 - xprod 生成的中间数据结构正在丢弃输入中的结构,然后我们通过进行大量 equals 比较来重新计算。

在 Ramda 中实现此目标的更好方法是什么?

这似乎可以解决问题

R.map(R.xprod(__, l2), l1)

http://ramdajs.com/repl/#?var%20l1%20%3D%20%5B%20%271%27%2C%20%272%27%2C%20%273%27%20%5D%3B%0Avar%20l2%20%3D%20%5B%20%27a%27%2C%20%27b%27%2C%20%27c%27%20%5D%3B%0A%0AR.map%28R.xprod%28__%2C%20l2%29%2C%20l1%29

另一种方式

R.splitEvery(l2.length, R.xprod(l1, l2))