uniq()
関数のドキュメントには、リストを並べ替えるとはるかに高速に実行されることが記載されています。また、連鎖呼び出しを使用すると、読みやすさが向上します。だからあなたはすることができます:
_.chain(c1).union(c2).sortBy("a").uniq(true, function(item){ return item.a; }).value();
または、チェーンされていないバージョン(11文字短くなりますが、読みにくくなります)を使用する場合:
_.uniq(_.sortBy(_.union(c1,c2),"a"),true, function(item){ return item.a; });
のドキュメントと例でuniq()
は、コールバック関数がどのように機能するかが明確にされていません。関数のアルゴリズムはuniq()
、両方のリストのすべての要素でこの関数を呼び出します。この関数の結果が同じである場合、その要素が削除されます(重複していると想定)。
union()
実際、配列で呼び出されたときに重複を防ぎます。この事実も使用できます。
_.map(_.union(_.pluck(c1,"a"),_.pluck(c2,"a")),function (item) {return {a:item};});
上記のように、最初にオブジェクトのリストを単純な配列(pluck()
)に変換し、次にそれらをを使用して結合しunion()
、最終的にはを使用map()
してオブジェクトのリストを作成します。
参照:uniq()