配列同士で重複する値があるか確認する

JavaScript

自前でやる方法。

lodash の_uniq みたいなやつ

確認する

確認するだけなら filter でできる。

function getIsDuplicate(arr1, arr2) {
  return [...arr1, ...arr2].filter(item => arr1.includes(item) && arr2.includes(item)).length > 0
}

const idList1 = ['A12345BC', 'B23456AC', 'C34567CD']
const idList2 = ['A67890AC', 'B23546AC', 'C34567CD']
const idList3 = ['A67890AC', 'B23546AC', 'C31567CD']

console.log(getIsDuplicate(idList1, idList2)) // true
console.log(getIsDuplicate(idList1, idList3)) // false

2 つの配列を 1 つにまとめて、filter で配列その 1 とその 2 どちらにも含まれる値だけを抽出する。
重複する値がないと空の配列になるので、length と合わせて 0 かどうか判定する。

[ 'C34567CD', 'C34567CD' ] //idList1と2から抽出
[]  //idList1と3から抽出

重複のみ取りだす

上の方法だと同じ値が 2 つずつできてしまうので、Set で一意にする。

const arr1 = ['apple', 'pen', 'pineapple']
const arr2 = ['grape', 'meron', 'apple', 'pen'] // appleとpenが重複
const arr1arr2 = [...arr1, ...arr2]

const duplicatedArr = arr1arr2.filter(
  item => arr1.includes(item) && arr2.includes(item)
)

console.log(duplicatedArr) // [ 'apple', 'pen', 'apple', 'pen' ]
console.log(new Set(duplicatedArr)) // Set { 'apple', 'pen' }

Set

集合。 配列などの iterable オブジェクトを渡すと、重複しない値のコレクションをオブジェクトとして返す。

console.log(duplicatedArr) // [ 'apple', 'pen', 'apple', 'pen' ]

これを配列にして出せば終わり。

console.log([...new Set(duplicatedArr)]) // [ 'apple', 'pen' ]

Share

カテゴリー

年月別

grgr-dkrkのアイコン

grgr-dkrk

Web エンジニア新人です。