JavaScript 配列の中に重複があるものを抽出する方法

配列の中に重複があるものを抽出する方法です。

例えば以下の配列があるとします。

const arr = ['hoge', 'foo', 'bar', 'hoge']

hoge が重複するので、['hoge’] という配列を返したい場合、以下のようにすることで実現可能です。

const arr = ['hoge', 'foo', 'bar', 'hoge']

const getDuplicatedValues = (arr) => {
  return Array.from(
    new Set(
      arr.filter((value, _index, srcArr) => srcArr.indexOf(value) !== srcArr.lastIndexOf(value))
    )
  )
}

const result = getDuplicatedValues(arr)
console.log(result) // ['hoge']

値が重複する場合、配列の中ではじめにその値が見つかるindexと最後にその値が見つかるindexが違います

これを条件にして、満たすものをfilterで抽出します。

new Set() しているのは、['hoge’, 'hoge’] となるのを最後に['hoge’]にするためです。