- やってることは難しくないが、CallBack挟んでいたりで内部のロジックまで理解せず使用できちゃうのでちょっとだけ深堀りする
var arr = [1,2,3,3]; // [1,2,3] var arrDistinct = arr.filter( (element,index,myself) => {return myself.indexOf(element) === index} )
arr.filter
は配列arr
内のすべての要素に対し引数に渡したCallback関数内の処理を反復実行する- calllback自体に渡す3つの引数は順に反復処理の実行中(current)の要素、その要素のIndex、
filter
に渡された配列自身
- calllback自体に渡す3つの引数は順に反復処理の実行中(current)の要素、その要素のIndex、
- A:
self.indexOf(element)
は第一引数のみのため、2番目以降に出現する要素のIndexは取得しない- 同じ値の要素も一番目に取得したIndexを返す
B:
index
はfllterが実行対象の配列arr
の全要素を舐めるため、上記のIndexも取得するreturnしている条件式内でFalse(A,BのIndex)が不一致は重複行を示すため、 全要素に対し、この条件を指定すれば重複しない要素がtrueとなる
- 結果として
arrDistinct
には重複しないarr
配列のシャローコピーが格納される
- 結果として