是否有一种通过比较元素从列表中过滤掉元组的无点方法?

Is there a points-free way of filtering out tuples from a list by comparing their elements?

所以我有一些代码要求用(input, input)调用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 个元素——我知道在这个简化的示例中我也可以使用严格相等来过滤,但通常情况并非如此在我实际编写的代码中)。

我知道我可以使用 lambda 非常简单地完成这项工作,但是由于我发现自己在使用 ramda 时经常以这种数据(元组列表)结束,所以我经常陷入尝试比较一个项目的困境在一个元组中以无点方式指向同一元组中的另一个项目。也许这只是保持简单并使用 lambda 的一个论点,但我很好奇是否有不同的方法来做到这一点。

Here's a link to a ramda repl 包含一个实现。

一个选项是简单地包装一个需要元组的两个参数的函数 R.apply. In your example that could be a partially applied R.eqProps

R.filter(R.apply(R.eqProps('id')), product)