配列同士で重複する値があるか確認する
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' ]