Ramda的分组交叉产品

时间:2018-03-07 13:46:25

标签: javascript functional-programming ramda.js

我想做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实现这一目标的更好方法是什么?

1 个答案:

答案 0 :(得分:5)

相关问题