どうも!TABEです。
JavaScriptでデータを持っている配列の中で(IDや、Nameなどの値が入っている配列)
Idが重複している場合にES6以降であればfilterを使って重複を削除できるので、それをメモが代わりに書いておきます。
結論から言うとarrayという配列があった時に、重複しているデータを削除させたい場合は以下の様にします。
const arrayFilterResult = array.filter((v, i, a) => a.findIndex(t => (t.id === v.id)) === i);
関数は以下のパラメータを取ります:
v: 現在の配列要素
i: 現在の配列要素のインデックス
a: 配列自体
t: 配列の要素
Array.prototype.findIndex
メソッドを使用しています。このメソッドは配列の各要素に対してテスト関数を実行し、テスト関数がtrueを返す最初の要素のインデックスを返します。もしテスト関数がどの要素に対してもtrueを返さない場合は、-1を返します。
findIndex
メソッドで、現在の要素vと同じidプロパティを持つ最初の要素のインデックスを検索しています。もし現在の要素がそのidに対して最初の要素であれば、そのインデックスiはfindIndex
メソッドが返すインデックスと等しくなります。これはそのidを持つ要素が重複していないことを意味します。その結果、テスト関数はtrueを返し、要素は新しい配列arrayFilterResult
に追加されます。
tは、Array.prototype.findIndex
メソッド内で使われる関数のパラメータです。この関数はarray
配列の各要素をtとして受け取り、その要素が現在の要素vと同じidプロパティを持つかどうかをチェックします。
コードのこの部分:a.findIndex(t => (t.id === v.id))
では、tはarray配列の各要素を表しています。この関数は、t.id === v.idという条件を使って、tのidプロパティが現在の要素vのidプロパティと同じかどうかをチェックしています。
以上です!
参考になれば幸いです。