なんかよくやるのに、良く忘れるのでメモしておく
2つの配列を比較し一致したものを取り出したい。
特に難しいことはないのでまるっとコードを記載する。
const a:string[] =['a', 'b', 'c', 'd']
const b:string[] =['d', 'e', 'f', 'g']
// 期待値
// const c = string[] = ['d']
const c = a.filter(a =>b.includes(a))
console.log(c)
これでc
は期待値になる。
どっちをFilterするのか
さて、いつもよくわからなくなるのは、どっちを回すべきなのかということ。
例えば今回は両者ともにLength
が4つだからいいけれど、例えば5と10だとどうなるのか。
実際にやってみる
const a: string[] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
const b: string[] = ['b', 'd', 'f', 'h', 'i', 'xx']
const c = a.filter(a => b.includes(a))
console.log(c)
と
const a: string[] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
const b: string[] = ['b', 'd', 'f', 'h', 'i', 'xx']
const c = b.filter(b => a.includes(b))
console.log(c)
で試してみたところ、結果は同じになった。
それぞれ、
1つ目のコードではaの要素のうち、配列bにも含まれている要素を取り出した。
2つ目のコードではbの要素のうち、配列aにも含まれている要素を取り出した。
どちらの方法を選択しても結果は変わらないが、コードの意図を明確にするために、xの要素のうち、配列xxにも含まれている要素を取り出した
というのをコードで表現する必要がある。