音ゲー、fps、DTM、プログラミング雑記置き場

ブログタイトル通りに雑記を垂れ流す。

【JavaScript】Array.filterとArray.indexOfで重複した要素を取り除く

  • やってることは難しくないが、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に渡された配列自身
  • A:self.indexOf(element)は第一引数のみのため、2番目以降に出現する要素のIndexは取得しない
    • 同じ値の要素も一番目に取得したIndexを返す
  • B:indexはfllterが実行対象の配列arrの全要素を舐めるため、上記のIndexも取得する

  • returnしている条件式内でFalse(A,BのIndex)が不一致は重複行を示すため、 全要素に対し、この条件を指定すれば重複しない要素がtrueとなる

    • 結果としてarrDistinctには重複しないarr配列のシャローコピーが格納される