0

所以我有一些代码需要xprod用(输入,输入)调用,如下所示:

const input = [
  { id: 1, data: 'a' },
  { id: 2, data: 'b' },
];
const product = xprod(input, input);
/* 
  [
    [ { id: 1, data: 'a' }, { id: 1, data: 'a' } ],
    [ { id: 1, data: 'a' }, { id: 2, data: 'b' } ],
    [ { id: 2, data: 'b' }, { id: 1, data: 'a' } ],
    [ { id: 2, data: 'b' }, { id: 2, data: 'b' } ],
  ] 
*/

我想通过将元组的第一个元素与同一元组中的第二个元素进行比较来过滤上面列表中的元组。在这种情况下,要删除包含具有相同 ID 的对象的元组(因此应该过滤掉第 0 和第 3 个元素——我知道在这个简化的示例中,我也可以使用严格相等来过滤,但通常情况并非如此在我实际编写的代码中)。

我知道我可以用 lambdas 很简单地完成这个任务,但是由于我发现自己在使用 ramda 时经常会得到这种数据(元组列表),所以我经常卡在试图将元组中的一个项目与另一个项目进行比较以无点方式在同一个元组中的项目。也许这是一个保持简单并使用 lambda 的论点,但我很好奇是否有不同的方法可以做到这一点。

这是包含实现的 ramda repl 的链接。

4

1 回答 1

4

一种选择是简单地包装一个函数,该函数需要元组的两个参数R.apply。在您的示例中,这可能是部分应用的R.eqProps.

R.filter(R.apply(R.eqProps('id')), product)
于 2017-09-18T18:21:45.327 回答