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

时间:2017-09-18 17:58:49

标签: javascript functional-programming ramda.js tacit-programming

所以我有一些代码需要用(输入,输入)调用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的论据,但我很好奇是否有不同的方法来做它。

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

1 个答案:

答案 0 :(得分:4)

一个选项是简单地包含一个函数,该函数期望元组的两个参数为R.apply。在您的示例中,可以部分应用R.eqProps

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