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' } ], 
    ] 
*/ 

Iは、上記の最初の要素を比較することによって、リスト内のタプルをフィルタリングしたいですタプルは同じタプルの2番目の要素に渡されます。この場合、等価なidsを持つオブジェクトを含むタプルを削除するには(0番目と3番目の要素をフィルタリングする必要があります - この単純化された例では、厳密な等価性を使用してフィルタリングすることもできますが、私が実際に書いているコードで)。

私はこれをラムダでかなり簡単に行うことができますが、ラムダと一緒に作業するときにこの種のデータ(タプルのリスト)がかなり頻繁に終わることが分かります。同じタプル内の別のアイテムへのタプルをポイントフリーの方法で返します。そしておそらくそれは単純なままにしてラムダを使用するという議論ですが、別の方法があれば私は好奇心です。実装を含む

Here's a link to a ramda repl

+2

リストに重複がないと仮定すると、対角線をスキップする代わりに 'xprod'を使用できませんか? – Bergi

+0

@Bergiおそらく - 私の現在のケースでは、対角以外の重複はありません。私はramdaが提供するxprodを利用していました。私は確かに自分自身を書くことができた。そして、それはおそらく最も速い方法でしょう。私は 'filter'で必要とされる次の繰り返しをスキップできると考えています。 – dvlsg

答えて

4

1つのオプションは、タプルの2つの引数を期待する関数を単にR.applyでラップすることです。あなたの例では、部分的に適用される可能性がありますR.eqProps

R.filter(R.apply(R.eqProps('id')), product) 
関連する問題